Sto facendo un po 'di lavoro con PostgreSQL 9.3 usando l' psycopg2API del database.
Ho impostato l'API DB nel livello di isolamento minimo (modalità "autocommit") e gestisco le mie transazioni direttamente tramite SQL. Esempio:
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;")
Fondamentalmente, la transazione che viene avviata è cur.execute("BEGIN;")limitata al solo cursore o è per l'intera connessione ( self.conn.cursor())?
Alcune delle cose più complesse che sto facendo riguardano più operazioni separate di database, che logicamente suddivido in funzioni. Poiché questo è tutto in una classe che ha la connessione come membro, è molto più conveniente creare cursori all'interno di ciascuna funzione. Tuttavia, non sono sicuro di come funzioni la creazione di cursori all'interno di una transazione.
Fondamentalmente, se le transazioni sono per connessione, posso semplicemente creare molti cursori al volo all'interno della transazione. Se sono per cursore, significa che devo passare il cursore ovunque. Cos'è questo?
La documentazione non tocca questo, sebbene il fatto che tu possa chiamare connection.commit()mi rende abbastanza sicuro che il controllo delle transazioni è per connessione.