another option if you want to stay in just python and are on a POSIX system is to use system file locking to ensure you don't get concurrent calls to your updated function.
http://docs.python.org/library/fcntl.html#fcntl.lockf -Preston On Nov 9, 10:17 pm, Continuation <selforgani...@gmail.com> wrote: > Thanks Christophe and Kenneth! > > Let me make sure I understand this: > > If I write this vew function: > > @transaction.commit_on_success > def update_high_bid(request): > .... > cursor = connection.cursor() > cursor.execute("SELECT high_bid FROM auctionapp_auction WHERE > id=%s > FOR UPDATE", [auction.id]) > returned_rows = cursor.fetchall() > high_bid = returned_rows[0][0] > if new_bid > high_bid: > auction.high_bid = new_bid > auction.save() > > The entire function will be wrapped within a transaction. > SELECT FOR UPDATE will acquire a row-level lock > and that lock will not be released until the function update_high_bid > () returns successfully, or until the function raises an exception and > the whole transaction is rolled back. > > Is that right? > > Thanks. > > On Nov 10, 12:45 am, Christophe Pettus <x...@thebuild.com> wrote: > > > > > On Nov 9, 2009, at 9:34 PM, Continuation wrote: > > > > Also does django middleware acquire database lock on my behalf, or do > > > I need to explicitly perform the locking? > > > In the example code, it's the SELECT ... FOR UPDATE that acquires the > > lock. Django doesn't currently have any explicit knowledge of > > locking, so you need to drop down to the custom SQL level to issue the > > right statement to acquire the lock on the row. > > > The example I wrote assumed you were using PostgreSQL as the backend; > > you can get all sorts of details about locking in PostgreSQL here: > > > > > http://www.postgresql.org/docs/8.4/interactive/explicit-locking.html#... > > -- > > -- Christophe Pettus > > x...@thebuild.com --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---