On Apr 27, 9:19 am, Michael Bayer <mike...@zzzcomputing.com> wrote:
> SQLite doesn't have support for SELECT..FOR UPDATE, and with_lockmode() 
> ultimately has no impact when using SQLite as nothing is rendered.  

IDK why sqlite doesn't support a way to elevate the lock on a select
in the middle of a deferred transaction like it does with updates and
inserts; but yeah, better the dialect to noop than raise a syntax
error.

> SQLite's concurrency model is based on a lock of the entire database file - 
> hardly a row lock - I wouldn't think such a strategy applies on that backend ?

I kinda feel the opposite, if I can't have a row lock - then yeah, go
ahead and lock the whole database!

But here's the rub, generally speaking a select isn't going to place a
read lock (or "reserved lock") on a sqlite database - you get a
"shared" lock, so other processes can't do insert's or updates, but
they could still select the row I'm about to update even while I'm in
an uncommited transaction.  In order to prevent another process from
reading the row I'm about to update form the database until I'm done
updating it - it seems that sqlite expects this unconventional "begin
IMMEDIATE transaction" notation, which will lock further reads against
the database until I commit.

I'm just thinking there might be a better way in sqlalchemy to get at
these weird sqlite transaction levels - 
http://www.sqlite.org/lang_transaction.html
- other than doing a session.execute? -

-clayg

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to