从db模型中检索任意PK

时间:2015-10-05 12:03:17

标签: flask sqlalchemy flask-sqlalchemy

如果我有一个带有PK的模型,请在另一个表中说id(所以它不是x = db.Column(db.Integer, db.ForeignKey('device.device_id'))):

Device.pk

如何在sqlalchemy查询中引用此列?

在Django中,我可以使用{{1}},它会解析PK。是否可以使用sqlalchemy烧瓶?

1 个答案:

答案 0 :(得分:0)

您可以加入它,也可以使用SQLAlchemy的关系自动运行它。

看起来你在谈论多对一关系,所以,using the documentation example

class Person(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    addresses = db.relationship('Address', backref='person',
                                lazy='dynamic')

class Address(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(50))
    person_id = db.Column(db.Integer, db.ForeignKey('person.id'))

如果在人物上以不同的方式命名PK,您只需调整ForeignKey即可匹配:

class Person(db.Model):
    toot = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    addresses = db.relationship('Address', backref='person',
                                lazy='dynamic')

class Address(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(50))
    person_id = db.Column(db.Integer, db.ForeignKey('person.toot'))

如果我想查找电子邮件地址为Person的所有test@example.com个对象,我可以说:

Person.query.join(Address).filter(Address.email='test@example.com').all()