【问题标题】:Flask SQLAlchemy outerjoin with three tables带有三个表的 Flask SQLAlchemy 外连接
【发布时间】:2018-05-22 23:25:46
【问题描述】:

我正在尝试使用 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()

有没有人遇到过这个问题或者可以指出如何查看我做错了什么?

谢谢!

【问题讨论】:

    标签: python sqlalchemy flask-sqlalchemy


    【解决方案1】:

    希望这将有助于将来遇到类似问题的人。

    我在没有 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 数据库)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-27
      • 2012-09-11
      • 2016-07-22
      • 2020-07-30
      • 2015-02-02
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多