December 2018
Beginner to intermediate
796 pages
19h 54m
English
You might come across situations where updating a shared state is unavoidable. You can use row-level locks if your database supports it or Django F() objects. Notably, MySQL using MyISAM engine does not have support for row-level locks.
Row-level locks are done in Django by calling select_for_update() on your QuerySet within a transaction. Consider this example:
with transaction.atomic():
feed = Feed.objects.select_for_update().get(id=id)
feed.html = sanitize(feed.html)
feed.save()
By using select_for_update, we lock the Feed object's row until the transaction is done. If another thread or process has already locked the same row, the query will be waiting or blocked until the lock is freed. This behavior ...
Read now
Unlock full access