2015-07-03 35 views
1

我有兩個瓶,SQLAlchemy的模型和respectives燒瓶不寧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

但是,當我嘗試進行搜索查詢爲在official docs描述的相關模型,我正在{ "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,SQLAlchemy 1.0.6和Python 2.7。

回答

1

this閱讀(見最後答案)燒瓶不安的問題:

根據在SQLAlchemy的文檔this section 預警,動態的關係只能用 一個一對多的關係,不是多對一的關係。在版本0.8.0b2(+)中,如果嘗試使用動態關係加載器來處理錯誤類型的關係,SQLAlchemy會引發異常。

而且warning寫着:

警告

「動態」加載程序僅適用於集合。 與多對一,一對一或uselist = False 關係使用「動態」加載器無效。在這些情況下,較新版本的SQLAlchemy會發出警告或異常。

更新

你不能有一個多到一的關係是動態的。您的person關係是 - 因爲backref - 除了是一對多之外還有多對一的關係。從docs

要一到多,其中 「反向」一邊是多對一,指定backref選項建立一個雙向的關係。

+0

根據這一點,我沒有在我的模型發現錯誤。 –

+0

我已經更新了答案。 – doru

2

查詢中的數值不應被引用。

錯誤:

"val":"1" 

正確:

"val":1