我想用Django更新表 。
在原始SQL中是这样的:
update tbl_name set name = 'foo' where name = 'bar'
我的第一个结果就是这样:
list = ModelClass.objects.filter(name = 'bar')
for obj in list:
obj.name = 'foo'
obj.save()
有没有更好的方式?
发布于 2018-04-03 18:37:42
请参阅django文档中的update函数:https://docs.djangoproject.com/en/dev/ref/models/querysets/#update。
总之你应该能够使用:
ModelClass.objects.filter(name='bar').update(name="foo")
你还可以使用F
对象来执行增加行等操作:
from django.db.models import F
Entry.objects.all().update(n_pingbacks=F('n_pingbacks') + 1)
请参阅文档:https://docs.djangoproject.com/en/1.9/topics/db/queries/
但是请注意:
ModelClass.save
方法(所以如果你有一些逻辑,它不会被触发)。发布于 2018-04-03 20:19:41
使用django-bulk-update
安装:pip install django-bulk-update
实现:
from bulk_update.helper import bulk_update
random_names = ['Walter', 'The Dude', 'Donny', 'Jesus']
people = Person.objects.all()
for person in people:
r = random.randrange(4)
person.name = random_names[r]
bulk_update(people) # updates all columns using the default db
https://stackoverflow.com/questions/-100003788
复制相似问题