Lasst uns sagen, dass wir mehrere sqlalchemy Modelle für Kataloge haben:Automatisieren sqlalchemy deklarative Modellerstellung
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer
from sqlalchemy.orm import relationship
Base = declarative_base()
class Plane(Base):
__tablename__ = 'Plane'
plane_id = Column(Integer, primary_key=True)
class Car(Base):
__tablename__ = 'Car'
car_id = Column(Integer, primary_key=True)
Jetzt für den Import/Export-Zwecke wollen wir diese externen IDs beziehen. Also für Plane
würden wir schreiben:
class PlaneID(Base):
issuer = Column(String(32), primary_key=True)
external_id = Column(String(16), primary_key=True)
plane_id = Column(Integer, ForeignKey(Plane.plane_id))
plane = relationship(Plane, backref='external_ids')
A CarID
Modell in genau der gleichen Art und Weise definiert werden würde.
Welche Möglichkeiten gibt es, diesen Prozess zu automatisieren?
Vielleicht könnten wir eine Mixin, Fabrik, Dekorateur oder Meta-Klasse verwenden. Wie würden wir dann die dynamisch benannten Spalten erzeugen? Es wäre gut, wenn Sie den generierten Modellen bei Bedarf weitere Spalten hinzufügen könnten. Zum Beispiel:
class CarID(ExternalID):
valid_from = Column(Date)
Also müsste ich dann alle meine Modelle auf 'ExternalID' basieren, oder? – bodo
@canaaerus Ja, das ist richtig. –