【问题标题】:Inserting large amounts of data in Django via the shell通过 shell 在 Django 中插入大量数据
【发布时间】:2015-03-20 00:05:11
【问题描述】:

我目前有一个使用 postgres 设置的 Django 环境。我试图在 shell 中运行一个简单的脚本,该脚本需要很长时间才能完成。

有没有一种有效的方法来更新 Django 中的 postgres 表中的所有记录?

我的表名为 City,它包含大约 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()

【问题讨论】:

    标签: python django slug


    【解决方案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)
    

    【讨论】:

    • 感谢您的回复。看来我的 ec2 实例卡住了。一旦我弄清楚如何停止干扰我的实例的进程,我将报告这个解决方案。
    • 我终于有机会试用您的解决方案了。工作得很好——不到三分钟就完成了。谢谢!
    猜你喜欢
    • 2011-10-09
    • 2016-12-22
    • 2015-08-16
    • 2018-02-13
    • 2012-11-01
    • 1970-01-01
    • 2021-12-24
    • 2019-09-03
    相关资源
    最近更新 更多