2010-05-17 7 views

risposta

12

Il DB-API spec richiede che la connessione al database inizia una nuova transazione, per impostazione predefinita. È necessario commit confermare le modifiche apportate o rollback per eliminarle.

Si noti che se il database supporta una funzione di auto-commit, questo deve essere inizialmente disattivato.

Pure SELECT dichiarazioni, poiché non apportano mai modifiche al database, non è necessario che le modifiche vengano eseguite.

6

commit viene utilizzato per indicare al database di salvare tutte le modifiche nella transazione corrente.

Select non modifica i dati in modo non c'è nulla da salvare e quindi nulla a commettere

Vedi wikipedia per le transazioni

0

Altri hanno spiegato perché un commit non è necessario su un'istruzione SELECT. Volevo solo far notare che si potrebbe utilizzare la proprietà autocommit dell'oggetto Connection per evitare di dover eseguire manualmente impegnarsi:

import cx_Oracle 

with cx_Oracle.connect(usr, pwd, url) as conn: 
    conn.autocommit = True 
    cursor = conn.cursor() 
    cursor.execute("UPDATE SO SET STATUS='PE' WHERE ID='100'") 
    cursor.close() 

Ciò è particolarmente utile quando si dispone di più istruzioni INSERT, UPDATE e DELETE all'interno della stessa connessione.

Problemi correlati