Here's a standalone working example:
import sqlalchemy as sa
import sqlalchemy.orm as saorm
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Objekt(Base):
__tablename__ = "objekt"
id = sa.Column(sa.Integer, primary_key=True)
typ_id = sa.Column(sa.Integer, sa.ForeignKey("
objekt_typ.id"))
typ = saorm.relationship("ObjektTyp")
name = sa.Column(sa.String(100))
__mapper_args__ = {
"polymorphic_on": typ_id,
}
class ObjektTyp(Base):
__tablename__ = "objekt_typ"
id = sa.Column(sa.Integer, primary_key=True)
name = sa.Column(sa.String(100))
class ChildObjekt1(Objekt):
__tablename__ = "child_objekt1"
id = sa.Column(sa.Integer, sa.ForeignKey(Objekt.id), primary_key=True)
text = sa.Column(sa.String(255))
__mapper_args__ = {
"polymorphic_identity": 1,
}
class ChildObjekt2(Objekt):
__tablename__ = "child_objekt2"
id = sa.Column(sa.Integer, sa.ForeignKey(Objekt.id), primary_key=True)
text = sa.Column(sa.String(255))
__mapper_args__ = {
"polymorphic_identity": 2,
}
if __name__ == "__main__":
engine = sa.create_engine("sqlite://")
Base.metadata.create_all(bind=engine)
Session = saorm.sessionmaker(bind=engine)
session = Session()
child1type = ObjektTyp(id=1, name="child1")
child2type = ObjektTyp(id=2, name="child1")
child1 = ChildObjekt1(text="child 1 text")
child2 = ChildObjekt2(text="child 2 text")
session.add_all([child1type, child2type, child1, child2])
session.flush()
for obj in session.query(Objekt):
print(obj)
Simon
On Mon, Apr 12, 2021 at 6:40 PM 'Sören Textor' via sqlalchemy
> To view this discussion on the web visit
https://groups.google.com/d/msgid/sqlalchemy/emf25854f8-548b-4e38-86ce-a540a476e6c3%40textors-01.