Использование python sqlalchemy для выполнения необработанных запросов с помощью оператора WITH - PullRequest
1 голос
/ 12 января 2020

Я пытаюсь вставить значения в базу данных Postgres11 с необработанными запросами sqlalchemy text(). Следующий запрос SQL работает правильно, когда я запускаю его через psql -клиент:

WITH a AS (
  INSERT INTO person (id) 
       VALUES ('a')
    RETURNING id
) 
INSERT INTO person_info (person_id) 
     SELECT id 
       FROM a;

Все строки вставлены правильно:

# select id from person;
 id 
----
 a
(1 row)

Однако, если я создаю движок в sqlalchemy и вызовите на нем выполнение с идентичным запросом, он выполняется успешно, но строки не вставляются:

>>> engine.execute("WITH a AS (INSERT INTO person (id) VALUES ('b') RETURNING id) INSERT INTO person_info (person_id) SELECT id from a")
<sqlalchemy.engine.result.ResultProxy object at 0x7f25e6c2a090>

Но новая строка не вставлена:

# select id from person;
 id 
----
 a
(1 row)

Каким образом выполнение запроса через psql -клиент отличается от выполнения его через sqlalchemy?

1 Ответ

2 голосов
/ 12 января 2020

На мой вопрос ответил на github .

Решение состоит в том, чтобы обернуть выполнение в контекст транзакции:

with engine.begin() as conn:
   conn.execute("whatever")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...