我的问题是要从多对多表中获取模型实例,并通过table1.id和table2.some_field对其进行过滤,作为子查询或第二个过滤器。
例如,我有类似的模型:
if
基于该代码
elseif
我收到了assoc = db.Table('table1_table2',
db.Column('table1_id', db.Integer, db.ForeignKey('table1.id')),
db.Column('table2_id', db.Integer, db.ForeignKey('table2.id')))
class Table1(db.Models):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
class Table2(db.Models):
id = db.Column(db.Integer, primary_key=True)
some_field = db.Column(db.Boolean)
table1 = db.relationship('Table1', secondary=table1_table2)
模型实例,但是当 instance = db.session.query(Table1).\
join(Table1.table1).\
options(contains_eager(Table1.table1)).\
filter(Table1.name == some_value).\
filter(Table2.somefield == True).\
first()
(空的Table2表)时,我收到了Table1
对象。在我的情况下,如何接收no relation occurs
以使延迟加载工作正常?
编辑: 我这样改变了我的sqlalchemy查询:
None
此查询的结果更接近我的期望-当没有关系时,它返回空列表,但是当有多个关系时,它返回所有关系,并在联接条件下进行过滤。
预期结果:
instance.table2 == []
代替:
instance = db.session.query(Table1). \
outerjoin(table1_table2). \
outerjoin(Table2, and_(Table2.id == table1_table2.c.table2_id, Table2.some_field = True)). \
filter(Table1.name == some_value). \
first()
Edit2: 经过一些编辑后,我的最终查询如下:
>>>instance.table2
[<Table2 {id}:True>, <Table2 {id}:True>]