Ich versuche, zwei Tabellen mit SqlAlchemy, identisch in Bezug auf die Struktur, aber mit anderen Namen zu erstellen.Erstellen Sie zwei verschiedene Tabellen mit dem gleichen Modell
Die Tabellen wie folgt aussehen (vereinfachtes Beispiel):
Base = declarative_base()
class MyTable(Base, OperationsMixin):
__tablename__ = 'the_table_name'
colA = Column(BigInteger)
colB = Column(TIMESTAMP(timezone=True))
class MyTableSecondary(MyTable):
pass
geben MyTableSecondary einen anderen Namen, was ich denke, ich ändern sollte, ist __tablename__
(oder sogar __table__.name
und __table__.fullname
).
Wenn ich dies jedoch tue, werde ich auch die Werte für die Basisklasse ändern, da all dies Klassenattribute sind.
Um diese Einschränkung zu gehen, ich in dieser Richtung eine returnSecondary
auf die Basisklasse könnte hinzufügen:
def returnSecondary(self, suffix):
tableArgs = list(self.__table_args__)
for a in tableArgs:
a.name += suffix
classname = self.__class__.__name__ + 'Secondary'
class_ = type(classname,
tuple(self.__class__.__bases__),
{'__tablename__': self.__tablename__ + suffix,
'__table_args__': tuple(self.__table_args__)})
return class_
Allerdings, wenn ich es nennen, es wirft eine KeyError für die erste Spalte definiert.
Gibt es etwas, das mir fehlt?
Einfach und effektiv. Du hast den Nagel auf den Kopf getroffen! – Jir