5

我刚刚切换到 Django 1.6(使用 Posgres 9.1),有一些我自己无法回答的问题:

  1. (已回答)如果我目前在一个或多个内部以及在哪些transaction.atomic块中,是否有打印/显示我的声明?

  2. (已回答)我既没有TransactionMiddleware启用也没有设置ATOMIC_REQUESTS为 True。因此,默认情况下,我的代码不包含在transaction.atomic块中,对吗?

  3. 在块内执行时,通过游标执行的 sql 语句是否正确提交transaction.atomic?是否有另一种/更好的方式来提交它们?

    with transaction.atomic():
        cursor = connection.cursor()
        cursor.execute(sql)
    
  4. 我需要包裹cursor.executemany()在一个transaction.atomic块中还是执行已经原子地发生了?

  5. 如何查看当前autocommit状态?何时将状态设置为连接开始时的事务,作为全局数据库设置?

4

1 回答 1

3

要回答您的问题之一:

connection您可以使用以下返回的对象来确定您当前是否处于原子块中:

from django.db.transaction import get_connection或其中的任何连接对象django.db.connections

它有一个in_atomic_block属性。


我觉得这将是最简单的,只需查看django 源代码

于 2014-04-04T16:25:09.963 回答