2016-06-08 42 views
0

如果我想在事務塊中寫入多個SQL語句,並確保該塊的所有ACID屬性都被遵循,那我該如何實現?在django交易中如何提供ACID屬性?

示例 - 當我使用transaction.atomic時,它爲該代碼塊提供原子性,但它是否提供併發控制和隔離(表級別或行級別)?

我目前使用PostgreSQL和我設置隔離級別ISOLATION_LEVEL_SERIALIZABLE

這是否爲我提供了transaction.atomic塊的序列化交易?

如果不這樣做,它是如何做到的?

回答

1

Django的transaction.atomic是通過使用數據庫事務實現的,因此數據庫爲其事務提供的任何保證也將由Django的原子塊提供。所以要回答你的問題,是的。

雖然Django使用保存點支持嵌套的原子塊,並且事務塊和保存點塊之間存在差異 - 具體而言,相同外部事務中的後來異常將導致成功完成的保存點阻止回滾。

+0

對不起,花了時間來測試這個。 transaction.atomic只是承諾其全部或全部查詢都不會運行。無論我選擇什麼樣的數據庫設置。 – RA123

+0

@ RA123:如果您遇到問題,我建議您發佈關於此問題的具體問題並獲得幫助。編程中的各種各樣的東西都可能出錯,使您無法獲得預期的結果。但是你問了一個非常普遍的問題,答案是Django通過使用底層數據庫的事務(和隔離級別)實現'transaction.atomic'。 –