SQLAlchemy-限制按深度查询的关系数

时间:2020-09-03 10:20:48

标签: python database join orm sqlalchemy

我有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=joinedjoin_depth=1选项。

这确实将查询分为多个部分,以使每个部分的连接数不超过一个。但是它会触发多个查询,并同时加入C。

有两个问题:

  1. 即使C相关,我如何确保只检索A和B?
  2. 在一般情况下,我可以确保仅提取特定深度的模型吗?

join_depth似乎具有这种意义,但是如果只停止一个查询就可以了。

0 个答案:

没有答案
相关问题