Я использую сервер postgres 9.2 и клиент python, использующий psycopg 2.5.
Я провел несколько тестов, потому что в моих лог-файлах появилось много записей WARNING: there is no transaction in progress
.
У меня есть код, который можно упростить до следующего:
import psycopg2
connection = psycopg2.connect(...)
with connection.cursor() as cursor:
# Multiple insert statements
cursor.execute("INSERT INTO ...")
cursor.execute("COMMIT")
Я обнаружил, что если я сделаю следующее, как только будет запущен первый COMMIT
(я повторно использую одно и то же соединение, поэтому приведенный выше код запускается несколько раз), каждый последующий оператор мгновенно фиксируется. Однако, если я вместо этого запускаю connection.commit()
, он работает так, как ожидалось (операторы фиксации, сделанные до сих пор, будущие операторы не будут зафиксированы автоматически).
Это ошибка или есть какое-то тонкое различие, которое я где-то пропустил в том, как это работает? Это проблема postgres или что-то связанное с внутренностями psycopg2?
Заранее спасибо!