我在一个基于 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} )提前致谢
1 回答

心有法竹
TA贡献1866条经验 获得超5个赞
下面是一个经过测试的例子。
请注意,由于这些表的连接方式不同,您需要显式指定连接,如下例所示,以便 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()
添加回答
举报
0/150
提交
取消