Estoy trabajando con PostgreSQL 9.3 usando la psycopg2
API de la base de datos.
Tengo la API DB configurada en el nivel de aislamiento mínimo (modo "autocompromiso") y estoy administrando mis propias transacciones directamente a través de SQL. Ejemplo:
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;")
Básicamente, ¿la transacción que se inicia está cur.execute("BEGIN;")
limitada solo a ese cursor, o es para toda la conexión ( self.conn.cursor()
)?
Algunas de las cosas más complejas que estoy haciendo involucran múltiples operaciones de base de datos separadas, que lógicamente divido en funciones. Como todo esto está en una clase que tiene la conexión como miembro, es mucho más conveniente crear cursores dentro de cada función. Sin embargo, no estoy seguro de cómo funciona la creación de cursores dentro de una transacción.
Básicamente, si las transacciones son por conexión, puedo crear muchos cursores sobre la marcha dentro de la transacción. Si son por cursor, eso significa que tengo que pasar el cursor por todas partes. Cual es
La documentación no toca esto, aunque el hecho de que pueda llamar connection.commit()
me hace confiar bastante en que el control de la transacción es por conexión.