【发布时间】:2018-06-19 15:33:27
【问题描述】:
我有以下 SQLAlchemy DB 模型,这些模型描述了经过多个生产步骤的部件:
class Part(db.Model):
part_number = db.Column(db.Integer, primary_key=True)
production_steps = db.relationship("ProductionStep")
class ProductionStep(db.Model):
id = db.Column(db.Integer, primary_key=True)
part_number = db.Column(db.Integer, db.ForeignKey('part.part_number'))
name = db.Column(db.String)
status = db.Column(db.String)
现在我想通过 Flask-Restless search query 查询具有特定名称和状态的生产步骤的所有部件。
这可以通过 Flask-Restless 搜索查询实现吗?如果是,我怎样才能实现指定的行为?
我正在使用 Flask-Restless 版本 0.17.0。
我尝试了以下过滤器:
q={"filters":[{"and":[{"name":"production_steps__name","op":"==","val":"cutting"},
{"name":"production_steps__status","op":"any","val":"done"}]}]}
这会导致以下错误:
sqlalchemy.exc.InvalidRequestError:无法将集合与对象或集合进行比较;使用 contains() 来测试成员资格。
这听起来很合理,所以我也尝试了以下方法:
q={"filters":[{"and":
[{"name":"production_steps","op":"any","val":{"name":"name","op":"eq","val":"cutting"}},
{"name":"production_steps","op":"any","val":{"name":"status","op":"eq","val":"done"}}]
}]}
此查询确实有效,但它确实返回仅匹配其中一个标准的零件(例如,状态不是“完成”的生产步骤“切割”的零件)
【问题讨论】:
-
最后一个查询有 2 个独立的 EXISTS 子查询表达式,所以你确实得到了它的要求,但是你需要在一个 EXISTS 表达式中包含两个谓词,Flask-Restless 似乎不会目前支持,至少一目了然。
-
是的,我猜你是对的。在此期间我还没有找到任何方法来做到这一点,所以如果你愿意写一个,我会接受你的解释作为答案。无论如何,感谢您的调查!
标签: python sqlalchemy flask-sqlalchemy flask-restless