Я працюю з PostgreSQL 9.3 за допомогою psycopg2API бази даних.
У мене встановлений API DB в мінімальному рівні ізоляції (режим "автокомісія") і я керую своїми транзакціями безпосередньо через SQL. Приклад:
cur = self.conn.cursor()
cur.execute("BEGIN;")
cur.execute("SELECT dbId, downloadPath, fileName, tags FROM {tableName} WHERE dlState=%s".format(tableName=self.tableName), (2, ))
ret = cur.fetchall()
cur.execute("COMMIT;")
По суті, чи є транзакція, яку розпочинає cur.execute("BEGIN;")лише цей курсор, чи це для всього з'єднання ( self.conn.cursor())?
Деякі з більш складних речей, які я роблю, стосуються декількох окремих операцій з базою даних, які я логічно розбиваю на функції. Оскільки це все в класі, який має з'єднання як член, набагато зручніше створювати курсори в межах кожної функції. Однак я не впевнений, як працює створення курсорів в рамках транзакції.
В основному, якщо транзакції здійснюються за з'єднання, я можу просто створити безліч курсорів під час руху в межах транзакції. Якщо вони за курсором, це означає, що я маю передавати курсор скрізь. Що це таке?
Документація цього не стосується, хоча той факт, що ви можете зателефонувати, connection.commit()робить мене досить впевненим, що контроль за транзакціями здійснюється за з'єднання.