2016-12-28 11 views
0

私はフレスコアとSQLAlchemyをmarshmallowと一緒に使用しています。私が階層内で外部キーを使用して動作する複数のモデル(テーブル)を持っている場合、どのようにして最も遠い子の結果を適切に照会できますか?フラスコからの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

はい、これを例で見てきましたが、バックリファレンスが必要であると仮定しています。 – 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

関連する問題