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子句”参数一样。后一个评论作为一个没有具体模式的句子有点复杂。