小编gur*_*let的帖子

在Django ORM中避免MySQL死锁

在MySQL数据库上使用Django我收到以下错误:

OperationalError: (1213, 'Deadlock found when trying to get lock; try restarting transaction')
Run Code Online (Sandbox Code Playgroud)

故障在以下代码中出现:

start_time = 1422086855
end_time = 1422088657
self.model.objects.filter(
    user=self.user,
    timestamp__gte=start_time,
    timestamp__lte=end_time).delete()

for sample in samples:
    o = self.model(user=self.user)
    o.timestamp = sample.timestamp
    ...
    o.save()
Run Code Online (Sandbox Code Playgroud)

我有几个并行进程在同一个数据库上工作,有时它们可​​能具有相同的工作或样本数据的重叠.这就是为什么我需要清除数据库然后存储新样本,因为我不想要任何重复.

我在事务块中运行整个事情with transaction.commit_on_success()并OperationalError经常得到异常.我更喜欢的是,事务不会陷入死锁,而只是锁定并等待其他进程完成其工作.

根据我的阅读,我应该正确地订购锁,但我不确定如何在Django中执行此操作.

什么是最简单的方法来确保我没有收到此错误,同时仍然确保我没有丢失任何数据?

python mysql django deadlock

14
推荐指数
2
解决办法
7837
查看次数

标签 统计

deadlock ×1

django ×1

mysql ×1

python ×1