【问题标题】:Django transaction isolation level in mysql & postgresqlmysql 和 postgresql 中的 Django 事务隔离级别
【发布时间】:2010-02-17 13:03:33
【问题描述】:

你知道 Django 中使用的事务的默认隔离级别吗? 是否可以以独立于数据库的方式设置隔离级别?

我主要对 mysql 和 postgres 感兴趣。

【问题讨论】:

    标签: django-models isolation-level


    【解决方案1】:

    您也可以使用 django 数据库选项更改每个客户端/会话,如下所示:

    DATABASE_OPTIONS = { "init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED", }
    

    【讨论】:

    • 有人可以确认这个运行吗?我有重复阅读的问题:stackoverflow.com/questions/2235318/…
    • @danihp 肯定会运行,尽管语法已关闭。我改用SET storage_engine=INNODB; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
    【解决方案2】:

    mysql 驱动程序不会更改隔离级别,因此它取决于服务器的默认隔离级别。

    【讨论】:

      【解决方案3】:

      目前 django 没有设置隔离级别。这是一个错误,因为 django 在任何高于 READ COMMITTED 的隔离级别下都无法正常工作。但是 MySQL 默认使用 REPEATABLE READ。有计划添加一个设置来设置隔离级别 (#14026) 以及关于将 READ COMMITTED 设为默认值的讨论 (#13906)。我还写了一篇关于MySQL transactions and django的详细文章。

      【讨论】:

      • 谢谢,但您链接到的博客似乎是私人的。你能打开那篇文章,还是在这里复制/粘贴?
      • 您能否引用一些信息或详细说明“django 在隔离级别高于 READ COMMITTED 的情况下无法正常工作”。
      • @Sebastian Noack 文章说“需要许可”?
      • 我发现这篇文章引用了这篇私人文章,实际上有你可以阅读的内容:ewencp.org/blog/django-and-mysql-isolation-levels
      • 我相信这与 Django 过去如何模拟自动提交而不是使用数据库级别的自动提交有关。这已在 Django 1.6 中修复:docs.djangoproject.com/en/1.6/topics/db/transactions/…
      【解决方案4】:

      (对不起,我不能评论 Danhip) 这个解决方案适合我(mySQL),我在 DATABASE 字段中添加了 Peter 的代码:

      DATABASES = {
          'default': {
              (...)
              'OPTIONS': {
                  (...),
                  "init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED"
              },
           }
      }
      

      【讨论】:

        【解决方案5】:

        如果你想使用读取未提交的隔离级别。

        您在 'OPTIONS on database connection configuration' 中添加 'isolation_level': 'read uncommitted'。

        DATABASES = {
            'read-uncommited': {
                'OPTIONS': {
                    'isolation_level': 'read uncommitted'
                },
            },
        }

        你可以从https://docs.djangoproject.com/en/2.1/ref/databases/找到

        【讨论】:

          猜你喜欢
          • 2011-02-24
          • 1970-01-01
          • 2017-07-08
          • 2010-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-17
          • 2018-10-23
          相关资源
          最近更新 更多