SQLAlchemy:麻烦查询多对多关系

时间:2015-05-04 17:44:58

标签: sqlalchemy flask-sqlalchemy

SQLalchemy的新手,一般是SQL查询,但希望这对某人来说很清楚:)在Flask应用程序中,我有两个模型,用户和类,在多对多的关系中

这是models.py

user_to_classes = db.Table('user_to_classes', Base.metadata,
db.Column('class_id', db.Integer, db.ForeignKey('classes.id')),
db.Column('user_id', db.Integer, db.ForeignKey('users.id'))
)



class Classes(db.Model):
    __tablename__= 'classes'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    date = db.Column(db.DateTime)
    participants = db.relationship('User', secondary=user_to_classes, backref = db.backref('classes',lazy='dynamic'))
    classtype_id = db.Column(db.Integer, db.ForeignKey('classtype.id'))
    status = db.Column(db.Integer)  #1 = open, 0 = closed

class User(UserMixin,db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, index=True)
    email = db.Column(db.String(64),unique=True,index=True)
    firstname = db.Column(db.String(64))
    lastname = db.Column(db.String(64))
    fullname = db.Column(db.String(64), index=True)
    telephone = db.Column(db.String(64))
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    password_hash = db.Column(db.String(128))
    member_since = db.Column(db.DateTime(), default=datetime.utcnow)
    last_seen = db.Column(db.DateTime(), default=datetime.utcnow)
    notes = db.Column(db.Text())
    punchcard_passes = db.Column(db.Integer)

我想知道有多少班级参加了用户。查询参与课程的用户数量没有问题,但反之则不然,因为在用户模型中没有值查询。它甚至可能吗?不熟悉SQL查询,我不知道在谷歌搜索什么。我见过的所有例子都是单向查询,而不是另一种方式。

谢谢!

1 个答案:

答案 0 :(得分:2)

len(user.classes)怎么样?它不起作用吗?

另外:不要以复数形式命名一个类,因为它的一个对象只代表一个类。