Domanda

Lavorare con i cursori in MySQL-python ho usato per chiamare "BEGIN;", "commit;", e "ROLLBACK;" esplicitamente come segue:

try:
    cursor.execute("BEGIN;")
    # some statements
    cursor.execute("COMMIT;")
except:
    cursor.execute("ROLLBACK;")

poi, ho scoperto che l'oggetto connessione sottostante ha i metodi corrispondenti:

try:
    cursor.connection.begin()
    # some statements
    cursor.connection.commit()
except:
    cursor.connection.rollback()

DB-API ho scoperto che non è così menzionano il metodo iniziare () per l'oggetto di connessione, anche per le estensioni.

Mysql-python, tra l'altro, tiri il DeprecationWarning, quando si utilizza il metodo. sqlite3.connection, per esempio, non ha il metodo a tutti.

E la domanda è il motivo per cui non v'è tale metodo nel PEP? È la dichiarazione in qualche modo opzionale, è sufficiente per invocare commit () invece?

È stato utile?

Soluzione 2

Ha deciso di rispondere a me stesso:

Un thread su DB API 2.0 transazioni in python-list e il seguente estratto dal libro evidente SQL il riferimento completo mi fanno pensare che DB API implementa comportamento standard SQL1:

  

La prima versione dello standard SQL   (SQL1) ha definito una transazione implicita   modalità, sulla base della transazione   supporto nelle prime release di DB2.   In modo implicito, solo il commit e   Sono supportati ROLLBACK. UN   transazioni SQL inizia automaticamente   con la prima istruzione SQL eseguita   da un utente o un programma e termina quando un   Commettere o eseguito ROLLBACK. Il   termine di una transazione implicitamente   inizia uno nuovo.

modalità di transazione esplicita (lo SQL2 e SQL: 1999). Sembra essere a portata di mano quando il RDBSM supporta la modalità autocommit e la connessione corrente è in tale modalità, ma DB API semplicemente non riflette lo

Altri suggerimenti

una tale precedenza ha chiesto domanda . Generalmente il "protocollo" da utilizzare con le transazioni è:

cursor = conn.cursor()
try:
    cursor.execute(...)
except DatabaseError:
    conn.rollback()
    raise
else:
    conn.commit()
finally:
    cursor.close()

A partire da Python 2.6 SQLite oggetti Connection possono essere utilizzati come gestori di contesto che si impegnano in modo automatico o transazioni rollback .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top