使用SQLAlchemy查询与其他实例相关的实例

时间:2016-08-16 19:59:39

标签: python flask sqlalchemy flask-sqlalchemy

我的应用程序有UserProperty个模型。我最初使用的是Peewee ORM,但我正在转向SQLAlchemy。我想选择当前用户列出的所有属性并将其显示在模板中。在Peewee中,迭代以下查询工作,但我在SQLAlchemy中得到ProgrammingError。如何在SQLAlchemy中获取与另一个实例相关的实例?

my_properties = Property.query.filter_by(listed_by=current_user)
{% for property in my_properties %}
    {{ property.listing_no }}
class Property(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    listed_by = db.Column(db.Integer, db.ForeignKey('users.id'))

1 个答案:

答案 0 :(得分:1)

在Peewee中,外键字段不会将实际键与它所代表的键分开。在SQLAlchemy中,外键列只是键,关系用于表示它指向的事物。

listed_by是一个整数。 current_userUser对象的代理。 SQLAlchemy不知道integer == User的含义。

创建与User对象的关系并对其进行过滤。

class Property(db.Model):
    id = db.Column(db.Integer, primary_key=True
    listed_by_id = db.Column(db.ForeignKey(User.id))
    listed_by = db.relationship(User, foreign_keys=[listed_by_id])
Property.query.filter_by(listed_by=current_user)

从技术上讲,你也可以通过传递用户的id来过滤id字段,尽管定义关系通常更有用。

Property.query.filter_by(listed_by_id=current_user.id)