我有一个模型,因为代码错误,有重复的行.我现在需要从数据库中删除任何重复项.
每一行都应该有一个独特的photo_id.有一种简单的方法可以删除它们吗?或者我需要做这样的事情:
rows = MyModel.objects.all()
for row in rows:
try:
MyModel.objects.get(photo_id=row.photo_id)
except:
row.delete()
Run Code Online (Sandbox Code Playgroud)
Yuj*_*ita 28
最简单的方法是最简单的方法!特别是对于性能甚至不重要的一个脚本(除非它确实如此).因为它不是核心代码,所以我只想写出第一个想到并且有用的东西.
# assuming which duplicate is removed doesn't matter...
for row in MyModel.objects.all():
if MyModel.objects.filter(photo_id=row.photo_id).count() > 1:
row.delete()
Run Code Online (Sandbox Code Playgroud)
一如既往,在你做这件事之前备份.
小智 16
这可能更快,因为它避免了MyModel中每行的内部过滤器.
由于id是唯一的,如果模型按它们按递增顺序排序,我们可以跟踪我们看到的最后一个id,当我们看到具有相同id的模型时,我们遍历行,它必须是重复的,所以我们可以删除它.
lastSeenId = float('-Inf')
rows = MyModel.objects.all().order_by('photo_id')
for row in rows:
if row.photo_id == lastSeenId:
row.delete() # We've seen this id in a previous row
else: # New id found, save it and check future rows for duplicates.
lastSeenId = row.photo_id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11243 次 |
| 最近记录: |