我目前使用postgres设置了Django环境。我试图在shell中运行一个简单的脚本,这个脚本需要很长时间才能完成。
有没有一种有效的方法来更新Django中postgres表中的所有记录?
我的桌子叫做城市,它包含大约200,000个城市。
这是我在python manage.py shell中运行的脚本:
from locations.models import City
from django.template.defaultfilters import slugify
counter = 0
for obj in City.objects.all():
counter = counter + 1
if counter % 1000 == 0:
print counter
obj.city_name_slug = slugify(obj.city_name) + "-" + slugify(obj.region)
obj.save()
答案 0 :(得分:1)
使用交易,它将加快您的查询速度。同时使用obj.save()
组合替换filter().update()
调用,这是更改数据库中单个字段的最快方法:
from locations.models import City
from django.db import transaction
from django.template.defaultfilters import slugify
counter = 0
with transaction.atomic():
for obj in City.objects.all():
counter = counter + 1
if counter % 1000 == 0:
print counter
slug = slugify(obj.city_name) + "-" + slugify(obj.region)
City.objects.filter(pk=obj.pk).update(city_name_slug=slug)