python - 使用一个大的 INSERT 语句保存许多 Django 对象

标签 python django

假设您遇到以下情况:

for i in xrange(100000):
  account = Account()
  account.foo = i
  account.save

显然,Django 执行的 100,000 条 INSERT 语句将需要一些时间。如果能够将所有这些 INSERT 组合成一个大的 INSERT 会更好。这是我希望我能做的事情:

inserts = []

for i in xrange(100000):
  account = Account()
  account.foo = i
  inserts.append(account.insert_sql)

sql = 'INSERT INTO whatever... ' + ', '.join(inserts)

有没有一种方法可以使用 QuerySet 来做到这一点,而无需手动生成所有那些 INSERT 语句?

最佳答案

如图in this related question ,可以使用 @transaction.commit_manually将所有 .save() 操作合并为一次提交,以大大提高性能。

@transaction.commit_manually
def your_view(request):
    try:
        for i in xrange(100000):
            account = Account()
            account.foo = i
            account.save()   
    except: 
        transaction.rollback()
    else:
        transaction.commit() 

或者,如果您喜欢冒险,请查看 this snippet它实现了一个用于批量插入的管理器。请注意,它仅适用于 MySQL,并且有一段时间没有更新,因此很难判断它是否能与较新版本的 Django 兼容。

关于python - 使用一个大的 INSERT 语句保存许多 Django 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5328301/

相关文章:

python - 开发 Airflow 时使用的最佳项目结构是什么?

python - Django 总共只允许一个用户 session

python - 在 django 网站中显示传感器读数

javascript - 无法理解来自 JavaScript 的 WebAuthn API 错误

python - django-guardian和django-rules可以一起使用吗?

python - 获得明亮的随机颜色 Python

python - MySQL 和 Python : Avoiding duplicate entries in mysql table

python - 在 Twisted 中写入文件(阻塞 IO 操作)的更好方法

PythonAnywhere:django.db.utils.OperationalError:没有这样的表:

python - 使用 Django 查询 Neo4j 数据库