Python: SQL
Теория: Транзакции
При подключении к базе создается объект connection. Этот объект управляет всеми транзакциями в базе. Рассмотрим подробнее как работают соединения в Psycopg2.
По умолчанию, когда первая команда отправляется в базу данных, с помощью cursor, создается новая транзакция. Все последующие запросы в базу данных будут выполняться в контексте той же транзакции. И тут не только запросы первого курсора, но и запросы всех курсоров в рамках того же соединения. Если какая-либо команда завершится неудачно, транзакция будет прервана, и никакие дальнейшие команды не будут выполняться до вызова метода rollback().
Соединение отвечает за завершение своей транзакции, вызывая метод commit() или rollback(). Все изменения немедленно становятся постоянными в базе данных. Если соединение закрывается с помощью метода close() или же уничтожается после выхода из области видимости во время выполнения транзакции, то сервер отменит транзакцию.
Коммиты
По умолчанию даже простой SELECT начинает транзакцию. А значит, пока мы не закоммитим действия, то сессия соединения так и останется в ожидании - "idle in transaction". Новички часто совершают подобную ошибку, недоумевая почему после запроса программа перестает отвечать. Ведь в режиме транзакции сессия удерживает блокировки на таблицу. Потому важно сохранять коммитом все изменения в базе, либо можно установить параметр соединения autocommit, тогда все запросы будут сохраняться автоматически.
Рекомендуемые программы
Завершено
0 / 7

