通过shell在Django中插入大量数据

时间:2015-03-20 00:05:12

标签: python django slug

我目前使用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()

1 个答案:

答案 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)