有这些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行为没有任何影响。