Flask-SQLalchemy第二层查询

时间:2018-04-13 19:00:46

标签: python sqlalchemy

我试图获取" DATA"中包含的信息。使用下表:

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)

我可以获得NAME的价值 Table_1.query.join(Table_2).add_columns(Table_2.NAME).all()。我怎么能add_column(Table_3.Data)

提前致谢!

1 个答案:

答案 0 :(得分:0)

首先,感谢IljaEverilä的指导!答案是连续加入我需要的表格。因此,在这种情况下: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)

事情变得复杂起来。但正如IljaEverilä所说,我们可以使用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).add_columns(Table_2.NAME,Table_3.DATA,Table_4.SOMETHING).all()