The following is still very confusing. https://docs.python.org/3.8/library/sqlite3.html#controlling-transactions
""" autocommit mode means that statements that modify the database take effect immediately." ... The Python sqlite3 module by default issues a BEGIN statement implicitly before a Data Modification Language (DML) statement (i.e. INSERT/UPDATE/DELETE/REPLACE). """ Is there a complete list that defines what are "the statements that modify the database"? What is the difference between "the statements that modify the database" and "Data Modification Language (DML) statement"? Are they the same? Whether or not they are the same or not, providing a complete list of such statements for each case should be far less confusing. BTW, who is maintaining the python doc? Is it somebody from the sqlite3 community or the python community? I hope that someone will go over the document and resolve all the inconsistencies and excessive "referring to other places references". > This operates in "auto-commit" mode. When a statement is executed that > is not already inside an EXPLICIT (=user-created) transaction, then it > is wrapped inside an IMPLICIT (=engine-created) transaction. Therefore: > > INSERT INTO TABLE_A ... > BEGIN <whatever> > INSERT INTO TABLE_B ... > DELETE FROM TABLE_C ... > COMMIT > SELECT ... FROM TABLE_D > > will essentially be turned into: > > BEGIN > INSERT INTO TABLE_A ... > COMMIT > BEGIN <whatever> > INSERT INTO TABLE_B ... > DELETE FROM TABLE_C ... > COMMIT > BEGIN > SELECT ... FROM TABLE_D > COMMIT > > where the auto-generated BEGINs are the equivalent of BEGIN DEFERRED > (the SQLite engine's default if you just use BEGIN). -- Regards, Peng _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users