我有两个表,它们之间存在多对多关系:
class Association(db.Model):
__tablename__ = 'association'
club_id = db.Column(db.Integer, db.ForeignKey('clubs.id'), primary_key=True)
student_id = db.Column(db.Integer, db.ForeignKey('students.id'), primary_key=True)
joined_date = db.Column(db.String)
assoc_student = db.relationship("Student")
class Club(db.Model):
__tablename__ = 'clubs'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String)
location = db.Column(db.String)
club_assoc = db.relationship("Association")
class Student(db.Model):
__tablename__ = 'students'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
age = db.Column(db.String)
gender = db.Column(db.String)
问题:
1) 这两个查询有什么区别?
students = db.session.query(Association).filter_by(club_id='1')
students = Association.query.filter_by(club_id='1')
它们似乎给出了相同的结果!
2) 我正在尝试获取特定年龄的学生列表,但是以下查询不起作用:
db.session.query(Association).filter_by(Association.club_id=='1', Association.assoc_student.age=='15')
但是我遇到了这个错误:
属性错误:关联.assoc_student 没有 'age' 属性,它既不是 'InstrumentedAttribute' 对象也不是 'Comparator' 对象
所以我使用了这个:
db.session.query(Student).join(Association).filter(Association.club_id=='1', Student.age=='15')
有没有不使用“join”而更好的方法?也许可以使用“backref”!