Python 炼金术第二层查询

Python 炼金术第二层查询,python,sqlalchemy,Python,Sqlalchemy,我试图通过以下表格获取“数据”中包含的信息: class Table_1(db.Model): id = db.Column(db.Integer, primary_key=True) table_2_id = db.Column(db.Integer, db.ForeignKey('table_2.id')) table_4_id = db.Column(db.Integer, db.ForeignKey('table_4.id')) class Table_2(d

我试图通过以下表格获取“数据”中包含的信息:

class Table_1(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    table_2_id = db.Column(db.Integer, db.ForeignKey('table_2.id'))
    table_4_id = db.Column(db.Integer, db.ForeignKey('table_4.id'))


class Table_2(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    table_3_id = db.Column(db.Integer, db.ForeignKey('table_3.id'))
    NAME = db.Column(db.String(60))
    table_1 = db.relationship('Table_1', backref='table_1_table_2', lazy=True)

class Table_3(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    DATA = db.Column(db.String(60))
    table_2 = db.relationship('Table_2', backref='table_2_table_3', lazy=True)
我可以使用
表1.query.join(表2).添加列(表2.NAME).all()
。如何添加列(表3.数据)


提前谢谢

首先,感谢Ilja Everilä的指导!答案是连续连接我需要的表。因此,在本例中:
Table_1.query.join(Table_2).join(Table_3).add_column(Table_3.DATA).all()

现在,如果我添加另一个像这样的表:

 class Table_4(db.Model):
     id = db.Column(db.Integer, primary_key=True)
     table_3_id = db.Column(db.Integer, db.ForeignKey('table_3.id'))
     SOMETHING = db.Column(db.String(60))
     table_1 = db.relationship('Table_1', backref='table_1_table_2', lazy=True)
事情变得复杂了。但正如Ilja Everilä所述,我们可以使用onclause将查询指向正确的方向:


Table_1.query.join(Table_2,Table_1.Table_2.id=Table_2.id).join(Table_4,Table_1.Table_4.id=Table_4.id).join(Table_3).添加_列(Table_2.NAME,Table_3.DATA,Table_4.SOMETHING).all()

Table_1和Table_3之间没有关系。仅通过表2(表2具有表3的id)。有什么想法吗?
…join(Table_2)。join(Table_3)
join(Table_2,Table_3)和
join(Table_2)。join(Table_3)
?或者,假设我们有另一个表(
Table_4
),它与
Table_3
有关系(就像
Table_2
一样)。我应该如何调用
join
语句来检索与
Table_2
相关的数据,而不是与
Table_4
相关的数据。查阅文件。我认为它允许多个目标实体,就像它允许多个关系“on子句”参数一样。后一个评论作为一个没有具体模式的句子有点复杂。