假设您遇到以下情况:
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/