2016-12-28 75 views
0

我正在使用Flask和SQLAlchemy和棉花糖,並試圖圍繞某事工作。如果我有幾個使用外鍵的模型(表格),我該如何正確查詢最遠孩子的結果?Flask來自heirarchy的SQLAlchemy查詢

如:

class School(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(50)) 

class Course(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(50)) 
    school_id = db.Column(db.Integer,db.ForeignKey('school.id')) 
    school = db.relationship("School", backref=db.backref("schoola", uselist=False)) 

class Student(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(60)) 
    course_id = db.Column(db.Integer, db.ForeignKey('course.id')) 
    course = db.relationship("Course", backref=db.backref("coursea", uselist=False)) 

我有架構的每一個棉花糖。我在這裏尋找的是我如何檢索某所學校學生的所有學生信息(使用SQLAlchemy)。稍後我會將這些序列化爲JSON。

+0

一個側面說明:坦白說,我不認爲你需要_both_' course_id'和'course',或'school_id'和'school';後者在配對中應該足夠了。 – 9000

+0

是的,我已經在示例中看到了這一點,並假定backref是必要的。 – CareFree

回答

2

我不熟悉的棉花糖,但我想你可以做同樣的事情到這一點:

School.query.\ 
     join(Course).\ 
     join(Course.schoola).\ 
     filter(School.name == 'School Name').all() 

OR

Student.query \ 
      .join(Course) \ 
      .join(School) \ 
      .filter(School.name == 'School Name') 
+0

非常感謝,這工作完美。 – CareFree