Je travaille avec PostgreSQL 9.3 en utilisant l' psycopg2
API de base de données.
J'ai l'API DB définie au niveau d'isolement minimum (mode "autocommit") et je gère mes propres transactions directement via SQL. Exemple:
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;")
Fondamentalement, la transaction qui est lancée par le cur.execute("BEGIN;")
limité est-elle uniquement à ce curseur, ou est-ce pour l'ensemble de la connexion ( self.conn.cursor()
)?
Certaines des choses les plus complexes que je fais impliquent plusieurs opérations de base de données distinctes, que je décompose logiquement en fonctions. Comme tout est dans une classe qui a la connexion en tant que membre, il est beaucoup plus pratique de créer des curseurs dans chaque fonction. Cependant, je ne sais pas comment fonctionne la création de curseurs dans une transaction.
Fondamentalement, si les transactions sont par connexion, je peux simplement créer de nombreux curseurs à la volée dans la transaction. S'ils sont par curseur, cela signifie que je dois faire passer le curseur partout. Lequel est-ce?
La documentation ne touche pas à cela, bien que le fait que vous puissiez appeler connection.commit()
me donne assez confiance que le contrôle des transactions est par connexion.