jac*_*ack 5 mysql django indexing transactions autocommit
在Django程序中,如何在数百个UPDATE之前显式禁用自动事务管理,并在UPDATE完成后启用它?
我调查了http://docs.djangoproject.com/en/dev/topics/db/transactions/,但没有发现任何线索。
我试图将以下代码放在开头
settings.DISABLE_TRANSACTION_MANAGEMENT = True
Run Code Online (Sandbox Code Playgroud)
我也试过
cursor = connection.cursor()
cursor.execute('SET SESSION autocommit = 0;')
...
UPDATE
...
cursor.execute('SET SESSION autocommit = 1;')
Run Code Online (Sandbox Code Playgroud)
以上两种方法都无法提高更新速度。以上代码有什么问题吗?
小智 3
from django.db import transaction
@transaction.commit_on_success
def my_function_that_does_thousands_of_updates():
# Do whatever you want here
transaction.set_dirty()
Run Code Online (Sandbox Code Playgroud)
这将允许您运行任何您想要运行的 SQL,然后仅在没有异常的情况下提交。如果您像示例中那样使用手动光标,则需要 set_dirty() 调用,但如果您只使用 Django ORM,则不需要调用 set_dirty() (如果我没记错的话;这至少是 1.2 行为)。
要完全控制事务,您可以使用 transaction.commit_manually 装饰器。至于你的速度问题,我无法评论。
django 文档很好地解释了这一点:http://docs.djangoproject.com/en/dev/topics/db/transactions/#django.db.transaction.commit_on_success
| 归档时间: |
|
| 查看次数: |
2419 次 |
| 最近记录: |