SQLAlchemy:将contains_eager与defer结合使用

时间:2015-02-24 10:57:23

标签: python sqlalchemy

有这些SQLAlchemy映射类:

class Person(Base):
    __tablename__ = 'person'
    id = sqla.Column(sqla.Integer, primary_key=True)
    name = sqla.Column(sqla.String)
    assoc_owned_things = relationship('Owns')

class Thing(Base):
    __tablename__ = 'thing'
    id = sqla.Column(sqla.Integer, primary_key=True)
    name = sqla.Column(sqla.String)
    assoc_owned_by = relationship('Owns')

class Owns(Base):
    __tablename__ = 'owns'
    person_id = sqla.Column(sqla.Integer, sqla.ForeignKey('person.id'), primary_key = True, autoincrement = False)
    person = relationship("Person")
    thing_id = sqla.Column(sqla.Integer, sqla.ForeignKey('thing.id'), primary_key = True, autoincrement = False)
    thing = relationship("Thing")
    ownership_payload = sqla.Column(sqla.Text)

然后这段代码:

person = (session.query(Person).join(Owns).join(Thing).filter(Person.id == id_p2)
    .options(Load(Owns).defer('ownership_payload'), contains_eager(Person.assoc_owned_things, Owns.thing)).one())
print(p2.assoc_owned_things[0].ownership_payload)

在一个查询中加载所有字段。如何在此查询中延迟ownership_payload字段,以便访问它将再次查询数据库?使用defer选项似乎对ORM行为没有任何影响。

0 个答案:

没有答案