Я делаю некоторую работу с PostgreSQL 9.3, используя psycopg2
API базы данных.
У меня API БД установлен на минимальном уровне изоляции (режим «автокоммит»), и я управляю своими собственными транзакциями напрямую через 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()
делает меня довольно уверен , что сделка, контроль за соединение.