Две одновременные транзакции psycopg2 - PullRequest
1 голос
/ 18 октября 2019

Я пытаюсь выяснить, как сделать следующее с psycopg2: у меня есть скрипт, который создает два подключения к двум разным базам данных, каждый со своим курсором. Цель состоит в том, чтобы удалить данные из таблицы в базе данных 1 и записать удаленные данные в базу данных 2. Я хочу сделать это транзакционным способом, который выполняет следующие действия:

  1. Начать транзакцию: соединение 1,Cur 1 -> Delete from ... возвращение данных Вставьте данные в базу данных 2, используя Connection 2, cur 2 3) Если шаг 2 выполнен успешно, подтвердите транзакцию Delete From Transaction и подтвердите транзакцию обновления

ПроблемаЯ имею в виду, что кажется, что, хотя я использую два отдельных соединения / курсора, по одному для каждой базы данных (обе с отключенной автоматической фиксацией) курсор 1 автоматически фиксируется, как только выполняется выполнение с курсором 2

con1 = psycopg2.connect(....)
con1.autocommit= False
cur1 = con1.cursor()

con2 = psycopg2.connect(....)
con2.autocommit= False
cur2 = con2.cursor()

cur1.execute(delete from ... returning)
cur.fetchone().... -> data[]

try:
 cur2.execute(insert ... data[])
 con2.commit()
 con1.commit()
except:
 con1.rollback()
 con2.rollback()

Основная идея здесь состоит в том, чтобы откатить запрос на удаление в соединении 1, если запрос вставки в соединении 2 по какой-либо причине не удался

Любая помощь будет высоко ценится

...