Cer*_*rin 4 python django django-models
你如何@commit_manually在Django 1.8中实现?
我正在尝试升级Django 1.5代码以使用Django 1.8,并且由于一些奇怪的原因,commit_manually装饰器在Django 1.6中被移除而没有直接替换.我的进程遍历数千条记录,因此它不能将整个进程包装在单个事务中而不会耗尽内存,但仍需要在事务中对某些记录进行分组以提高性能.为此,我有一个用@commit_manually包装的方法,每N次迭代调用transaction.commit().
我无法从文档中确切地说出来,但这似乎仍然得到了支持.我只需要打电话set_autocommit(False)而不是有一个方便的装饰.它是否正确?
是的,你已经明白了.调用set_autocommit(False)启动事务,然后调用commit()并set_autocommit(True)提交它.
你可以把它包装在你自己的装饰器中:
def commit_manually(fn):
def _commit_manually(*args, **kwargs):
set_autocommit(False)
res = fn(*args, **kwargs)
commit()
set_autocommit(True)
return res
return _commit_manually
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3015 次 |
| 最近记录: |