#python #sql #sqlalchemy
#python #sql #sqlalchemy
Вопрос:
Если у меня есть в sqlalchemy:
select([foo.c.id]).select.where(foo.c.id == bar.c.val).select_from(foo)
Я получаю SQL, который выглядит как:
SELECT foo.id
FROM foo, bar
WHERE foo.id = bar.val
Чего я хочу, так это:
SELECT foo.id
FROM foo
WHERE foo.id = bar.val
Я понимаю, что само по себе это не имеет смысла, но я компилирую выражение и вкладываю его в предложение exists инструкции delete в таблице, bar
поэтому bar.val
имеет смысл в контексте — полная инструкция будет выглядеть примерно так:
DELETE FROM bar WHERE EXISTS (
SELECT foo.id
FROM foo
WHERE foo.id = bar.val
)
Как я могу отключить автоматическое FROM
создание предложения в SQL alchemy?
Ответ №1:
В вашем случае вам не нужно его отключать. Просто создайте полный delete
оператор и sqlalchemy
разберетесь:
from sqlalchemy.sql.expression import exists
q2 = bar.delete().where(exists(q1))
print(q2)
создает:
DELETE FROM bar WHERE EXISTS (SELECT foo.id
FROM foo
WHERE foo.id = bar.id)