【发布时间】:2011-06-08 16:56:34
【问题描述】:
我正在努力处理这样的查询(由 sqlalchemy 生成。为了清楚起见,我已将其重命名)
SELECT table.x + :dx AS cx, table.y + :dy AS cy
FROM table
WHERE NOT (EXISTS (SELECT * FROM table AS table_1
WHERE table_1.x = cx AND table_1.y = cy))
AND (EXISTS (SELECT * FROM table2
WHERE table2.table_id = table.id))
对于 dx、dy = 1、1 和表格:
Table:
id | x | y
----+---+---
1 | 0 | 0
Table2:
id | table_id
----+----------
1 | 1
它应该返回:
cx | cy
----+----
1 | 1
但是第二个条件似乎返回 false。
编辑:这似乎是 SQLAlchemy 中事务刷新的问题。我认为如果执行查询(非 ORM 映射),它会自动刷新。但是,在这种情况下,它似乎没有被刷新或以不正确的顺序刷新。无论如何,添加额外的model.DBSession.flush() 似乎可以解决问题。
【问题讨论】:
-
不应该返回
1 | 1吗? -
我认为第 1 行应该是
SELECT table.x + :dx AS cx, table.y + :dy AS cy -
我用你的表结构和值进行了测试,查询返回
1 | 1。我错过了什么? -
@Adam Bernier:您似乎错过了部分 SQLAlchemy 的查询缓存。请参阅编辑。
-
是的,我确实错过了。很高兴你知道了!
标签: python sql sqlalchemy exists