python - 如何自动从数据库中选取一个元素?

标签 python django transactions

我有一个带有简单模型的 Django 应用程序:

class ThingToPick(models.Model):
    title = models.CharField(max_length=200)
    start_date = models.DateTimeField('date published', auto_now=True)
    status = models.IntegerField(default=0)
    filedata = models.TextField() 

我的一些观点:

    exec_item = ThingToRun.objects.filter(status=0).order_by('start_date')[0]
    exec_item.status = 1
    exec_item.save()

我需要某种方法来从一个且只有一个并发用户中选择每个 ThingToRun。我知道这已损坏,我该如何修复它?

最佳答案

在这里,您真正想做的不仅仅是挑选一些东西,而是挑选一些东西并将其标记为正在进行中,以便在此期间没有其他人挑选它。所以你想要的方法是select_for_update :

exec_item = ThingToRun.objects.select_for_update().filter(status=0).order_by('start_date')[0]
exec_item.status = 1
exec_item.save()
...process exec_item ....

关于python - 如何自动从数据库中选取一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26716485/

相关文章:

java - 如何将 Spring 事务传播到另一个线程?

php - 是什么导致 mySQL 中出现回滚失败错误?

来自 Abaqus/CAE 的 Python 多处理

django - TableBlock 如何指定表格 CSS 类

MySQL C 连接器/mysql_autocommit 函数

django - 从一种表单创建同一模型的多个实例

django - 在 django admin 中使用外部链接来创建或更新

python - 如何从selenium page_source获取内容类型

python - 使用鼠标移动 QtWidgets.QtWidget

python - 负向后看量词未修复