【问题标题】:How are ACID properties provided in django transactions?django 事务中如何提供 ACID 属性?
【发布时间】:2016-06-08 20:07:58
【问题描述】:

如果我想在一个事务块中编写多个 SQL 语句并确保该块遵循所有 ACID 属性,我应该如何实现?

示例 - 当我使用 transaction.atomic 时,它为该代码块提供原子性,但它是否提供并发控制和隔离(表级别或行级别)?

我目前正在使用 PostgreSQL,并且我已将 隔离级别 设置为 ISOLATION_LEVEL_SERIALIZABLE

这是否为我提供 transaction.atomic 块的序列化交易?

如果不这样做,它是怎么做到的?

【问题讨论】:

    标签: django postgresql transactions


    【解决方案1】:

    Django 的transaction.atomic 是通过使用数据库事务实现的,因此数据库为其事务提供的任何保证也将由Django 的原子块提供。所以回答你的问题,是的。

    不过,需要注意的一个微妙之处是 Django 通过使用保存点来支持嵌套原子块,并且事务块和保存点块之间存在区别——具体来说,同一外部事务中的稍后异常将导致成功完成保存点块回滚。

    【讨论】:

    • 抱歉,测试这个需要时间。 transaction.atomic 只是承诺其块下的所有查询都将运行或不运行。无论我选择什么作为数据库设置。
    • @RA123:如果您遇到问题,我建议您发布有关它的具体问题并寻求帮助。编程中的各种事情都可能出错,使您无法获得预期的结果。但是你问了一个很笼统的问题,答案是 Django 通过使用底层数据库的事务(和隔离级别)来实现transaction.atomic
    猜你喜欢
    • 1970-01-01
    • 2012-04-26
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2021-06-10
    相关资源
    最近更新 更多