我正在使用sqlalchemy。我有以下型号 当我用joinedloading询问父母时,我得到了孩子和狗。这是准确的。
chart.series[myIndex].show();
chart.series[myIndex].hide();
当我查询孩子时,我要求加入父母,但我也不希望父母元素也养狗。但这似乎是发生了什么事。
Parent
Children
Dogs
我想提高查询效率,所以我不想不必要的联接。 我的模型中是否缺少将要执行此操作的标志?我想要这个的主要原因是因为我假设我会节省一些查询时间。
Child:
Parent:
Dogs (i do not want this to be joined...its an unnecessary query. I just want the top level parent)
这就是我的查询方式
class Parent():
__tablename__ = 'parent'
__table_args__ = {'schema': 'test'}
id = Column(Integer, primary_key=True)
children = relationship(Child, lazy='joined', passive_deletes='all')
dogs = relationship(Dogs, lazy='joined', passive_deletes='all')
class Child():
__tablename__ = 'child'
__table_args__ = {'schema': 'test'}
id = Column(Integer, primary_key=True)
parent_id = Column(Integer, ForeignKey('test.parent.id', ondelete="CASCADE"), nullable=False)
parent = relationship('Parent', back_populates='children')
答案 0 :(得分:0)
由于Parent
被配置为加入负载,因此它的关系就是这样做的。在这种情况下,您必须使用method chaining来明确禁用不需要的选项:
session.query(Child).\
options(joinedload(Child.parent).
lazyload(Parent.dogs)).\
all()
您还可以使用noload()
或raiseload()
。
答案 1 :(得分:0)
对于现在想知道如何实现这一点的任何人,您可以从 1.3.6 版开始指定子关系加载选项: https://docs.sqlalchemy.org/en/14/orm/loading_relationships.html#specifying-sub-options-with-load-options
char name[STR + 1];
char driver[STR + 1];