Skip to content

Instantly share code, notes, and snippets.

@svetlyak40wt
Created November 16, 2010 10:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save svetlyak40wt/701662 to your computer and use it in GitHub Desktop.
Save svetlyak40wt/701662 to your computer and use it in GitHub Desktop.
Django helper to use SELECT FOR UPDATE in the query.
from django.db import DEFAULT_DB_ALIAS
def select_for_update(queryset):
""" Returns query, rewrited to use SELECT ... FOR UPDATE.
Can be used in transaction to get lock on selected rows.
Database must support this SQL statements.
Example:
>>> query = select_for_update(MyModel.objects.filter(blah = 'minor'))
>>> unicode(query.query)
"SELECT * FROM myapp_mymodel WHERE blah = 'minor' FOR UPDATE"
"""
sql, params = queryset.query.get_compiler(DEFAULT_DB_ALIAS).as_sql()
return queryset.model._default_manager.raw(sql + ' FOR UPDATE', params)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment