Django 中的游标是否在打开的事务中运行?

use*_*478 6 python sql django postgresql python-db-api

我的 Django 应用程序正在使用一些自定义 SQL,我在这样的视图中执行:

db = router.db_for_write(model)
cursor = connections[db].cursor()
cursor.execute("INSERT INTO ....")
Run Code Online (Sandbox Code Playgroud)

由于我使用的是TransactionMiddleware,因此我的视图在事务中运行,但我不清楚获取像这样的新游标是否“转义”了当前打开的事务,或者游标是否仍然是打开事务的一部分。我收到一些错误消息,使我相信游标正在事务中运行。

我希望能够使用游标在由TransactionMiddleware. 这可能吗?

如果重要的话,我正在运行带有 PostgreSQL 8.4 数据库的 Django 1.4。

Lak*_*sad 2

如果有一个视图需要手动管理事务,则应该使用该视图中的装饰器来commit_manually。

文档中。

from django.db import transaction

@transaction.commit_manually
def viewfunc(request):
    ...
    # You can commit/rollback however and whenever you want
    transaction.commit()
    ...

    # But you've got to remember to do it yourself!
    try:
        ...
    except:
        transaction.rollback()
    else:
        transaction.commit()

@transaction.commit_manually(using="my_other_database")
def viewfunc2(request):
    ....
Run Code Online (Sandbox Code Playgroud)

是的,导入事务游标仅提供事务的游标,并不会创建新事务。