flask无法构造查询



我有两个Flask-SQLAlchemy模型和相应的Flask-Restless API端点,如下所示:

class Person(db.Model):
    person_id = db.Column(db.Integer, primary_key=True)
    document = db.Column(db.String(), unique=True)
    name = db.Column(db.String(45))
class Student(db.Model):
    student_id = db.Column(db.Integer, primary_key=True)
    person_id = db.Column(db.Integer, db.ForeignKey('person.person_id'))
    code = db.Column(db.String(45))
    person = db.relationship('Person', backref=db.backref('students', lazy='dynamic'))
manager.create_api(Person, methods=['GET', 'POST'])
manager.create_api(Student, methods=['GET', 'POST'])

这些URL运行良好:

  • http://localhost:8080/api/person
  • http://localhost:8080/api/student

但是,当我尝试像官方文档中描述的那样对相关模型进行搜索查询时,我会得到以下请求的{ "message": "Unable to construct query" }

  • http://localhost:8080/api/person?q={"filters":[{"name":"students__code","op":"eq","val":"1"}]}

  • http://localhost:8080/api/person?q={"filters":[{"name":"students","op":"has","val":{"name":"code","op":"eq","val":"1"}}]}

  • http://localhost:8080/api/student?q={"filters":[{"name":"person__document","op":"eq","val":"111"}]}

  • http://localhost:8080/api/student?q={"filters":[{"name":"person","op":"any","val":{"name":"document","op":"eq","val":"111"}}]}

我使用的是Flask 0.10.1、Flask SQLAlchemy 2.0、Flask Restless 0.17.0、SQLAlchemi 1.0.6和Python 2.7。

查询中的数值不应被引用。

错误:

"val":"1"

正确:

"val":1

从中读取(见最后一个答案(烧瓶不稳定问题:

根据这个警告部分在SQLAlchemy文档中,只能使用动态关系对于一对多的关系,不是多对一的关系。在0.8.0b2(+(版本中,如果您试图为错误类型的关系使用动态关系加载器,SQLAlchemy会引发异常。

警告显示:

警告

"动态"加载程序仅适用于集合。对无效使用多对一、一对一或uselist=False的"动态"加载程序关系。SQLAlchemy的较新版本会发出警告或这些情况下的例外情况。

更新

你不可能有一种多对一的动态关系。因为backref,你的person关系是一种多对一的关系,而不是一对多的关系。来自文档:

为了在一对多中建立双向关系"reverse"侧是多对一,请指定backref选项。

相关内容

  • 没有找到相关文章

最新更新