[Sqlalchemy-tickets] Issue #4026: mixing selectin load on top of inline (zzzeek/sqlalchemy)
Brought to you by:
zzzeek
From: Michael B. <iss...@bi...> - 2017-07-13 03:01:17
|
New issue 4026: mixing selectin load on top of inline https://bitbucket.org/zzzeek/sqlalchemy/issues/4026/mixing-selectin-load-on-top-of-inline Michael Bayer: pushing the new feature beyond what was planned see how hard this would be ``` #!python from sqlalchemy import Table, Column, Integer, String, ForeignKey, create_engine from sqlalchemy.orm import Session from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Person(Base): __tablename__ = 'person' id = Column(Integer, primary_key=True) type = Column(String(50), nullable=False) name = Column(String(50)) __mapper_args__ = { 'polymorphic_identity': 'person', 'polymorphic_on': type } class Manager(Person): __tablename__ = 'manager' id = Column(ForeignKey('person.id'), primary_key=True) manager_name = Column(String(30)) __mapper_args__ = { 'polymorphic_identity': 'manager', 'polymorphic_load': 'selectin' } class EngineerBase(Person): __tablename__ = 'engineer' id = Column(ForeignKey('person.id'), primary_key=True) engineer_name = Column(String(30)) __mapper_args__ = { 'polymorphic_load': 'selectin' } class EngineerType1(EngineerBase): __mapper_args__ = { 'polymorphic_identity': 'engineer_t1', 'polymorphic_load': 'inline' } class EngineerType2(EngineerBase): __mapper_args__ = { 'polymorphic_identity': 'engineer_t2', 'polymorphic_load': 'inline' } engine = create_engine('sqlite://', echo=True) Base.metadata.create_all(engine) engine.echo = True session = Session(engine) eng1 = EngineerType1() eng2 = EngineerType2() session.add_all([eng1, eng2]) session.commit() session.query(Person).all() ``` |