【发布时间】:2015-09-03 06:30:57
【问题描述】:
我有两个多对多关系表:
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')
但我收到此错误:
AttributeError:与 Association.assoc_student 关联的“InstrumentedAttribute”对象和“Comparator”对象都没有属性“age”
这就是我使用这个的原因:
db.session.query(Student).join(Association).filter(Association.club_id=='1', Student.age=='15')
没有“加入”有没有更好的方法来做到这一点?也许使用“backref”!?
【问题讨论】:
标签: python-2.7 flask sqlalchemy