我有3种模型-A(根),B(子),C(孙子)
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class A(db.Model):
__tablename__ = 'A'
a_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255), nullable=False)
# Specifying relationship to B
b_id = db.Column(db.ForeignKey('B.b_id', ondelete='CASCADE'), index=True)
b = db.relationship('B', primaryjoin='A.b_id == B.b_id',
lazy="joined", innerjoin=True, join_depth=1)
class B(db.Model):
__tablename__ = 'B'
b_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255), nullable=False)
# Specifying relationship to C
c_id = db.Column(db.ForeignKey('C.c_id', ondelete='CASCADE'), index=True)
c = db.relationship('C', primaryjoin='B.c_id == C.c_id',
lazy="joined", innerjoin=True, join_depth=1)
class C(db.Model):
__tablename__ = 'C'
c_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255), nullable=False)
目的是当我(使用all()
查询A时仅检索A和B。我使用了lazy=joined
和join_depth=1
选项。
这确实将查询分为多个部分,以使每个部分的连接数不超过一个。但是它会触发多个查询,并同时加入C。
有两个问题:
join_depth
似乎具有这种意义,但是如果只停止一个查询就可以了。