Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶SQLAlchemy外套带三张桌子_Python_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 烧瓶SQLAlchemy外套带三张桌子

Python 烧瓶SQLAlchemy外套带三张桌子,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我试图使用SQLAlchemy中的outerjoin()连接三个表,但是当我尝试我认为应该可以工作的查询时,它抛出以下错误: 1054, "Unknown column 'articles.id' in 'on clause'" 我相信通过使用ORM引用可以以更简单的方式完成,但目前我正在尝试找出如何在没有ORM引用的情况下实现这一点 下面是表格和查询。我还从SQLAlchemy导入和 class User(db.Model): id = db.Column(db.Integer, p

我试图使用SQLAlchemy中的outerjoin()连接三个表,但是当我尝试我认为应该可以工作的查询时,它抛出以下错误:

1054, "Unknown column 'articles.id' in 'on clause'"
我相信通过使用ORM引用可以以更简单的方式完成,但目前我正在尝试找出如何在没有ORM引用的情况下实现这一点

下面是表格和查询。我还从SQLAlchemy导入

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()
有没有人遇到过这样的情况,或者可以告诉我怎么看我做错了什么


谢谢

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

我在没有的情况下尝试了它,并稍微修改了查询,这就是有效的方法,left/outer正确地连接了所有三个表:

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)