OK, it's clear! I have to organise semaphore I've done something like this while not db((db.table.id == x) & (db.table. <http://db.table.id/>hidden == False)).update(hidden=True) : sleep(some time) db.commit() to imitate record locking.
Many thanks! On Wednesday, April 1, 2015 at 12:35:14 AM UTC+2, Niphlod wrote: > > you're basically asking for a select ... for update, that isn't supported > on many backends. Asking for it in SQLite means locking THE ENTIRE table . > > usually you'd mimick what you want (without hurting performances so much) > with an additional field. > > > db(db.table.id == x).update(hidden=True) > db.commit() > rec = db.table(x) > > and then > > rec.anotherfield = f(rec.field) > rec.hidden = False > rec.update_record() > db.commit() > #or > db(db.table.id == x).update(anotherfield=f(rec.field), hidden=False) > db.commit() > > > On Wednesday, April 1, 2015 at 12:27:34 AM UTC+2, Val K wrote: >> >> Hi! >> Here is controller's logic: >> 1. Get field value: >> fld_v= db.table[i].any_field >> >> 2. Evaluate new value depending on existing one: >> new_fld_v=fun(fld_v) >> >> 3. Update record with new value: >> db(db.table.id==i).update(any_field=new_fld_v) >> >> The problem: >> After first step (i.e. after SELECT) just a SHARED lock is acquired (see >> SQLite docs). Thus, any other request can call the same controller and get >> the same field's value and etc. >> How can I allow sequential calls only to prevent any other's SELECT until >> UPDATE? I know about BEGIN DEFERRED/IMMEDIATE/EXCLUSIVE, also >> I know web2py enclose all request/controller's calls in something like >> BEGIN/COMMIT, but SQLite doesn't support nested BEGIN/COMMIT (except >> SAVEPOINT). >> What is default isolation_level/locking_mode is realized during web2py >> request process? >> Is there safe solution or I worry for nothing? >> >> >> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.