On Wed, Sep 5, 2012 at 1:45 AM, Yo-Yo Ma <baxterstock...@gmail.com> wrote: > restaurant = > Restaurant.objects.select_for_update().select_related('owner').get(name=u'Koala > Kafe') > > Assuming the ``owner`` field points to a ``Person`` table, will the > aforementioned query prevent the ``Person`` row returned for the Koala > Kafe's owner from being saved in a separate transaction? > > (I will be using Postgres and using ``transaction.commit_on_success``) >
select_for_update() … "Returns a queryset that will lock rows until the end of the transaction, generating a SELECT ... FOR UPDATE SQL statement on supported databases." Postgresql handles this … "If specific tables are named in FOR UPDATE or FOR SHARE, then only rows coming from those tables are locked; any other tables used in the SELECT are simply read as usual. A FOR UPDATE or FOR SHARE clause without a table list affects all tables used in the statement. If FOR UPDATE or FOR SHARE is applied to a view or sub-query, it affects all tables used in the view or sub-query." http://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-FOR-UPDATE-SHARE Django doesn't specify any tables when it generates a SELECT … FOR UPDATE query: https://github.com/django/django/blob/master/django/db/backends/__init__.py#L585 Hope that helps Tom -- 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.