python - 带有三个表的 Flask SQLAlchemy 外连接
问题描述
我正在尝试使用 SQLAlchemy 中的outerjoin()来连接三个表,但是当我尝试查询时,我认为它应该可以正常工作,它会引发以下错误:
1054, "Unknown column 'articles.id' in 'on clause'"
我确信它可以通过使用 ORM 引用以更简单的方式完成,但目前我正试图弄清楚如何在没有它的情况下完成这项工作。
下面是表格和查询。我还从 SQLAlchemy导入and_
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True, nullable=False)
class Articles(db.Model):
id = db.Column(db.Integer, primary_key=True)
article_name = db.Column(db.String(100), unique=True, nullable=False)
class ReadArticles(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
article_id = db.Column(db.Integer, db.ForeignKey('articles.id'), nullable=False)
和查询:
r = db.session.query(Articles, User, ReadArticles).outerjoin(ReadArticles,
and_(User.id == ReadArticles.user_id, Articles.id == ReadArticles.article_id)).all()
有没有人遇到过这个问题或者可以指出我如何看到我做错了什么?
谢谢!
解决方案
希望这将有助于将来遇到类似问题的人。
我在没有and_的情况下尝试了它,并稍微修改了查询,这是可行的,左/外部正确连接了所有三个表:
q = db.session.query(Articles, User, ReadArticles).filter(User.id == 1).outerjoin(ReadArticles, ReadArticles.article_id == Articles.id).all()
为了使其更具可读性:
q = db.session.query(Articles, User, ReadArticles)
q = q.filter(User.id == 1).outerjoin(ReadArticles,
ReadArticles.article_id == Articles.id).all()
这将在我上面概述的 ORM 类中的所有三个表中执行正确的左/外连接(至少使用 MySQL DB)。
推荐阅读
- c - 输入任何 p,r,n 值后。我只得到 SI=0
- reactjs - 如何使用 react-beautiful-dnd 和材料 ui 在 2 列之间拖放项目
- node.js - 使用猫鼬将对象数组添加到子文档
- java - Spring Integration Mail 与 Outlook 的入站复制
- javascript - 如何使用javascript打印textarea中的每一行?
- typescript - 键入过滤 arrayTypeScript 的函数
- android - 为什么我的 android 应用程序在 Google Play 上上传后无法运行
- php - 如果我使用另一个 GET,如何维护地址栏上的 PHP GET 值?
- optimization - 当我尝试用相同的初始猜测求解 Drake 中的非线性程序时,无法从 SNOPT 获得相同的解决方案
- javascript - 服务器请求中断 Heroku