Я пытаюсь выяснить, как сделать следующее с psycopg2: у меня есть скрипт, который создает два подключения к двум разным базам данных, каждый со своим курсором. Цель состоит в том, чтобы удалить данные из таблицы в базе данных 1 и записать удаленные данные в базу данных 2. Я хочу сделать это транзакционным способом, который выполняет следующие действия:
- Начать транзакцию: соединение 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 по какой-либо причине не удался
Любая помощь будет высоко ценится