使用 flask_sqlalchemy 的多对多查询

我在一个基于 SQLAlchemy 的应用程序中得到了这个模型


class Task(db.Model):

    id = db.Column(db.Integer, primary_key=True)

    name = db.Column(db.String(512))

    status = db.Column(db.Enum(Status))



class User(db.Model):

    id = db.Column(db.Integer, primary_key=True)

    name = db.Column(db.String(512))

    user_tasks = db.relationship('Task',

                                 secondary=user_tasks, lazy='subquery',

                                 backref=db.backref('users', lazy=True)

                                )


user_tasks = db.Table('user_tasks',

    db.Column('task_id', db.Integer, db.ForeignKey('task.id'), primary_key=True),

    db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True),

    db.Column('value', db.Integer)

)

我想加入 3 个表(使用flask_sqlalchemy而不是原始查询)相当于:


db.session.execute(

                    'SELECT u.id, u.name, ut.value\

                     FROM user u\

                     JOIN user_tasks ut\

                     ON u.id = ut.user_id\

                     AND ut.task_id = :task_id\

                     JOIN task t\

                     ON t.id = ut.task_id',

                     {'task_id': task_id}

                   )

提前致谢


弑天下
浏览 197回答 1
1回答

心有法竹

下面是一个经过测试的例子。请注意,由于这些表的连接方式不同,您需要显式指定连接,如下例所示,以便 SQLAlchemy 执行查询。db.session.query(User.id,User.name,user_tasks.c.value).\     join(user_tasks,user_tasks.c.user_id==User.id).\     filter(user_tasks.task_id==task_id).\    join(Task,Task.id==user_tasks.c.task_id).all()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python