0

Djangoトランザクションを読み、プロジェクトで使用する予定ですが、ここで知りたい質問がいくつかあります。実際、登録時にトランザクションを使用したいのですが、登録時に2〜3箇所で挿入を行っているので、クエリが失敗した場合は挿入を行わないようにします。commit_on_successしたがって、Djangoのドキュメントによると、トランザクションのタイプを使用する必要があると思います。

しかし、これらのトランザクションはデータベースに依存しているのでしょうか、それともすべてDjangoの内部にあるのでしょうか。DBストレージエンジンを変更する必要があるかどうか。別のストレージエンジンで使用する必要がある場合、またはSQLの1つのテーブルとnosqlの1つのテーブルなど、将来別のデータベースで使用する必要がある場合はどうなりますか?それともこれは問題ではありませんか?

また、私がそれを次のように使用する場合:

from django.db import transaction

def function1():
    #code here without transaction

@commit_on_success
def function2():
    #code here with transaction

次に、すべてのメソッドコードが成功した場合、関数2はcommitで動作しますが、トランザクションがインポートされる前と同様に、関数1はどうなりますか?function1にはどのような種類のトランザクションが適用されますか?function1にトランザクションを持たせず、他のモデルのフォームコードで機能するように正常に動作させたいので、どうすればよいですか?

だから私の質問は、トランザクションなしですべてのものを正常に動作させるが、トランザクション付きのメソッドを1つ持つにはどうすればよいかということです。デコレータを使用して機能し、他のメソッドは正常に動作しますか、それとも何か他のことをする必要がありますか?そして、これらのトランザクションは、データベースとInnoDBのようなデータベースストレージエンジンに依存していますか?これらのトランザクションは、Djangoの内部トランザクションにすぎませんか?

4

1 に答える 1

0
  • Django は DB トランザクションを使用します。
  • DB ストレージ エンジンを変更する必要はありません。
  • すべての DB エンジンがトランザクションに対応しているわけではありません
  • DB エンジンがサポートしていないときにトランザクション管理を使用する場合 (MyISAM テーブルを使用する MySQL など)、トランザクションなしですべてが機能します。

つまり、1 つのメソッドで @commit_on_success を使用しても安全です。今後、トランザクション非対応のDBに変更しても壊れることはありません。

于 2013-01-13T07:52:50.197 に答える