Working with cursors in mysql-python I used to call "BEGIN;", "COMMIT;", and "ROLLBACK;" explicitly as follows:
try:
cursor.execute("BEGIN;")
# some statements
cursor.execute("COMMIT;")
except:
cursor.execute("ROLLBACK;")
then, I found out that the underlying connection object has the corresponding methods:
try:
cursor.connection.begin()
# some statements
cursor.connection.commit()
except:
cursor.connection.rollback()
Inspecting the DB-API PEP I found out that it does not mention the begin() method for the connection object, even for the extensions.
Mysql-python, by the way, throws the DeprecationWarning, when you use the method. sqlite3.connection, for example, does not have the method at all.
And the question is why there is no such method in the PEP? Is the statement somehow optional, is it enough to invoke commit() instead?
look a this previously asked question. Generally the "protocol" to use with transactions is:
cursor = conn.cursor()
try:
cursor.execute(...)
except DatabaseError:
conn.rollback()
raise
else:
conn.commit()
finally:
cursor.close()
Starting from python 2.6 sqlite Connection
objects can be used as context managers that automatically commit or rollback transactions.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With