Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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_Join_Sqlalchemy - Fatal编程技术网

Python 在sqlalchemy中,如何通过使列条目相同来组合两个查询?

Python 在sqlalchemy中,如何通过使列条目相同来组合两个查询?,python,join,sqlalchemy,Python,Join,Sqlalchemy,假设我有一个映射类User,映射到同名的表,并有一列“age”表示他的年龄。 我现在对以下问题感兴趣: 在我的申请过程中,出现了两个问题: q1 = session.query(User).filter(lots of conditions) q2 = session.query(User).filter(lots of other conditions) 我现在想在他们年龄相同的情况下,将q2“加入”到q1。 但我不知道这是怎么回事。我尝试了以下方法,但没有成功: q1.join(q2.su

假设我有一个映射类
User
,映射到同名的表,并有一列“age”表示他的年龄。 我现在对以下问题感兴趣:

在我的申请过程中,出现了两个问题:

q1 = session.query(User).filter(lots of conditions)
q2 = session.query(User).filter(lots of other conditions)
我现在想在他们年龄相同的情况下,将q2“加入”到q1。 但我不知道这是怎么回事。我尝试了以下方法,但没有成功:

q1.join(q2.subquery(), q1.age==q2.age) # the query doesn't hold the columns of the queried class
q1.join(Age).join(q2.subquery()) # Works only if age is a relationship with mapped class Age
我最近的电话是这样的:

a1 = aliased(User)
a2 = aliased(User)
q1 = session.query(a1)
q2 = session.query(a2)
s = q2.subquery()
q1.join(s, a1.age==a2.age).all()
>>> sqlalchemy.exc.OperationalError: (OperationalError) no such column: user_2.age 'SELECT user_1.id AS user_1_id, user_1.name AS user_1_name, user_1.age AS user_1_age \nFROM user AS user_1 JOIN (SELECT user_2.id AS id, user_2.name AS name, user_2.age AS age \nFROM user AS user_2) AS anon_1 ON user_1.age = user_2.age' ()

关于如何运行这个问题有什么想法吗?

在仔细阅读了关于子查询的问题的答案后,我设法找到了一个解决方案。不是最后一行,而是放:

q1.join(s, a1.age==s.columns.age).all()

这样,on子句就变成了on user_1.age=anon_1.age的
,这正是我们想要的。

它到底抱怨什么?在我看来,ON子句似乎要引用用户2,它隐藏在子查询中。它应该要引用anon_1。这是sqlalchemy中的一个bug吗?对于任何试图编辑这篇文章的人:我不认为
a1
应该是
q1
,但我已经5年没有使用sqlalchemy了,所以我可能错了。请评论上述代码的问题所在。连接实际上是正确的,因为
a1
q1
中的别名
用户。join调用中的第二个参数指定join的
on
子句。