[prev in list] [next in list] [prev in thread] [next in thread]
List: sqlite-users
Subject: Re: [sqlite] What does commit actually do?
From: "Keith Medcalf" <kmedcalf () dessus ! com>
Date: 2019-10-25 20:56:12
Message-ID: cc7520b853e9d546ae2116ff399efd3f () mail ! dessus ! com
[Download RAW message or body]
You can tell if you are in a transaction by the in_transaction property of the \
connection. This tracks whether or not a BEGIN of some kind has been issued by the \
wrapper (either through magic or because you explicitly issued a command to BEGIN a \
transaction). If in_transaction is True, then you need to issue a commit or rollback \
to end that transaction. This property reflects the what the WRAPPER thinks is the \
transaction state, and not the underlying SQLite3 database transaction state.
So, if you are issuing multiple SELECTs and you need repeatable read for these \
SELECTs, then you need to issue the BEGIN explicitly.
If you want something that allows Python to use SQLite3 as SQLite3 (rather than as a \
dbapi compliant generic database) then you should look at APSW instead.
--
The fact that there's a Highway to Hell but only a Stairway to Heaven says a lot \
about anticipated traffic volume.
> -----Original Message-----
> From: sqlite-users <sqlite-users-bounces@mailinglists.sqlite.org> On
> Behalf Of Peng Yu
> Sent: Friday, 25 October, 2019 14:13
> To: SQLite mailing list <sqlite-users@mailinglists.sqlite.org>
> Subject: Re: [sqlite] What does commit actually do?
>
> The manual says this.
>
> "The Python sqlite3 module by default issues a BEGIN statement
> implicitly before a Data Modification Language (DML) statement (i.e.
> INSERT/UPDATE/DELETE/REPLACE)."
> > If you did NOT specify "isolation_level = None" in the .connect() call
> then
> > you probably ARE in a transaction if you've been running queries.
>
> I just use the default .connect() without specifying isolation_level
> explicitly. Then I am in a transaction?
>
> import sqlite3
> conn=sqlite3.connect(f)
> c=conn.cursor()
> import zlib
> c.execute('SELECT name FROM sqlar')
> result = c.fetchall()
> for x in result:
> print(x[0])
>
> > But why do I need to commit my transaction if I'm just reading?
>
> Is there any .commit() implied in the SELECT statement?
>
> > If you're just reading then you can commit or rollback.
>
> So I should close the `conn` immediately after `c.fetchall()` to
> release resources used by sqlite3?
>
> > If the database is not in WAL mode
>
> In the above example, should I use WAL mode or not?
>
> https://charlesleifer.com/blog/going-fast-with-sqlite-and-python/
>
> --
> Regards,
> Peng
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic