Dav*_*ave 10 django django-models python-3.x sql-update
我正在使用Django和Python 3.7。我有这个代码
article = get_article(id)
...
article.label = label
article.save(update_fields=["label"])
Run Code Online (Sandbox Code Playgroud)
有时我在“保存”行上收到以下错误...
raise DatabaseError("Save with update_fields did not affect any rows.")
django.db.utils.DatabaseError: Save with update_fields did not affect any rows.
Run Code Online (Sandbox Code Playgroud)
显然,在“ ...”中,另一个线程可能正在删除我的文章。还有另一种方法可以重写我的“ article.save(...)”语句,以便如果该对象不再存在,则可以忽略引发的任何错误?
一个评论由gachdavit使用建议select_for_update
。您可以修改get_article
函数以select_for_update
在获取文章之前进行调用。这样,只要当前事务不提交或不回滚,保存该文章的数据库行将被锁定。如果另一个线程试图同时删除该文章,则该线程将阻塞直到释放锁。实际上,只有在调用该save
函数之后,该文章才会被删除。
除非您有特殊要求,否则我将采用这种方法。