SQLAlchemy:在多对多关系中查询问题

SQLAlchemy:在多对多关系中查询问题,sqlalchemy,flask-sqlalchemy,Sqlalchemy,Flask Sqlalchemy,SQLalchemy是sql查询的新手,但希望有人能明白这一点:)在Flask应用程序中,我有两个模型,用户和类,处于多对多关系中 这是模型 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.

SQLalchemy是sql查询的新手,但希望有人能明白这一点:)在Flask应用程序中,我有两个模型,用户和类,处于多对多关系中

这是模型

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查询不够流利,我不确定在谷歌上搜索什么。我看到的所有示例都是单向查询,而不是反向查询

谢谢

len(user.class)怎么样?这不管用吗


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

不,它说的是TypeError:AppenderSequery类型的对象没有len(),是的,到目前为止,我在变量名中犯了很多新手错误。但我害怕折射器,因为它可能会打断大量通话。我是个白痴。我从来没有想到我也只需要在用户模型中声明关系。我已经添加了db.relationship('Classes',secondary=user\u to_Classes,backref=db.backref('users',lazy='dynamic')),现在我确实可以做一个简单的len(user.Classes)。谢谢你让我走上正轨!事实上,你不需要。这就是backref的目的,请阅读这里的文档:因此,您只需要在其中一个文档中声明多对多。奇怪的是,user.classes在我也在user中添加声明之前无法工作。我会把它取下来,去看医生,试着掌握它的窍门,让它发挥作用。谢谢