gpt4 book ai didi

python - 使用flask_sqlalchemy进行多对多查询

转载 作者:行者123 更新时间:2023-12-01 06:29:50 24 4
gpt4 key购买 nike

我在基于 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}
)

提前致谢

最佳答案

下面是一个经过测试的示例。
请注意,由于这些表的连接方式不同,您需要显式指定连接(如下例所示),以便 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()

关于python - 使用flask_sqlalchemy进行多对多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59958284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com