【问题标题】:Django1.6 transaction.atomic questionsDjango1.6 transaction.atomic 问题
【发布时间】:2014-03-16 03:47:04
【问题描述】:

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

  1. (已回答)如果我目前在一个或多个内部并且 transaction.atomic 阻塞,是否有打印/显示我的语句?

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

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

    with transaction.atomic():
        cursor = connection.cursor()
        cursor.execute(sql)
    
  4. 我需要将cursor.executemany() 包装在transaction.atomic 块中还是已经自动执行?

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

【问题讨论】:

  • #2 绝对正确...默认行为已更改为 DB 级自动提交
  • 请在每个帖子中提出一个问题。

标签: django transactions postgresql-9.1 atomic django-1.6


【解决方案1】:

回答您的一个问题:

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

from django.db.transaction import get_connectiondjango.db.connections 内的任何连接对象

它有一个in_atomic_block 属性。


我觉得通过django source查看它是最简单的

【讨论】:

  • django.db.transaction.get_connection() 根据其文档字符串是“私有 API”。我认为你应该改用from django.db import connections, DEFAULT_DB_ALIAS; connections[DEFAULT_DB_ALIAS].in_atomic_block
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 2021-12-19
  • 1970-01-01
  • 2014-03-18
  • 2014-01-13
  • 2014-03-27
  • 2017-08-25
相关资源
最近更新 更多