Я борюсь с таким запросом (сгенерированным 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()
, кажется, решило проблему.