2016-07-11 19 views
3

Ich möchte mit mysql Skript unter Verwendung von pymysql verwenden.Wie kann ich die Transaktion in pymysql beginnen? (Mysql)

START TRANSACTION; 
BEGIN; 
insert into ~~~ 
COMMIT; 

mein Python-Quellcode

connection = pymysql.connect(~~~~~~~) 
    with connection.cursor() as cursor : 
     connection.begin() 
     cursor.execute(~~.sql) 
     connection.commit() 
connection.close() 

Meine Frage ist, ist "connection.begin()" ist die gleiche Sache "Transaktion starten; BEGIN;" ? Ich möchte "START TRANSACTION; BEGIN;"

Antwort

0

Nach der PyMySQL docs/example (Singular ... dies scheint nicht ein sehr gut unterstützt Paket), standardmäßig Auto-Commit deaktiviert ist, so müssen Sie connection.commit() ausführen, um die Transaktion tatsächlich zu beenden.

Ihr Beispiel:

import pymysql.cursors 

connection = pymysql.connect(host='localhost', 
          user='user', 
          password='passwd', 
          db='db', 
          charset='utf8mb4', 
          cursorclass=pymysql.cursors.DictCursor) 

try: 
    with connection.cursor() as cursor: 
     sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)" 
     cursor.execute(sql, ('[email protected]', 'very-secret')) 

    # connection is not autocommit by default. So you must commit to save changes. 
    connection.commit() 

finally: 
    connection.close() 
+1

Danke für die Frage zu beantworten. Ich habe bereits connection.commit verwendet. Aber manchmal ist die Datenbank "Lock wait timeout exceeded" aufgetreten. Also möchte ich die Transaktion beginnen lassen. – Bethlee

+0

Wie funktioniert das mit MyISAM-Tabellen, die keine Transaktionen haben? Und wenn wir einen anderen Transaktionsmodus verwenden möchten? – CMCDragonkai