なぜPythonのDB-APIでの接続操作を「開始」していないのですか?

StackOverflow https://stackoverflow.com/questions/2546926

  •  23-09-2019
  •  | 
  •  

質問

私が呼び出すために使用されるのmysql-pythonの中のカーソルでの作業、および; "COMMIT"、 "BEGIN" "ROLLBACK;"明示的に、次のとおりです。

try:
    cursor.execute("BEGIN;")
    # some statements
    cursor.execute("COMMIT;")
except:
    cursor.execute("ROLLBACK;")

次に、私は、基礎となる接続オブジェクトは、対応するメソッドを有することが判明しました

try:
    cursor.connection.begin()
    # some statements
    cursor.connection.commit()
except:
    cursor.connection.rollback()

私はそれがないことが判明この DB-APIのPEPを点検でも拡張のために、接続オブジェクトの開始()メソッドを言及します。

あなたがこの方法を使用するときに

のMysql-pythonのは、やり方によって、DeprecationWarningをスローします。 sqlite3.connectionは、例えば、すべての方法を持っていません。

そしてPEPには、このような方法が存在しない理由の質問はありますか? )何とかオプションの文は、ある(コミット起動することが十分である代わりに?

役に立ちましたか?

解決 2

自分自身に答えることにしました。

DBのAPI 2.0トランザクションについて

A スレッドする python-listと目立つブック SQLの完全なリファレンスのからの抜粋で私はDBのAPIの実装は、標準的な動作をSQL1だと思います。

  

SQL標準の最初のバージョン   (SQL1)は暗黙的なトランザクションを定義しました   トランザクションに基づくモード、   DB2の初期のリリースでサポートされています。   暗黙のモードでは、唯一のCOMMITおよび   ROLLBACKステートメントがサポートされています。 A   SQLトランザクションが自動的に開始されます   最初に実行されるSQL文を使用して、   ユーザーまたはプログラムおよび終了することにより   COMMITまたはROLLBACKが実行されます。ザ・   暗黙的に1つのトランザクションの終了   新しいものを開始します。

は明示的なトランザクションモード(SQL2とSQL:1999)。RDBSMサポートの自動コミットモードと現在の接続がそのモードであるが、DBのAPIはそれを反映していないときに便利なように思わ

他のヒント

を見 Aこれ以前に聞かれる質問。一般的に、トランザクションで使用する「プロトコル」は、次のとおりです。

cursor = conn.cursor()
try:
    cursor.execute(...)
except DatabaseError:
    conn.rollback()
    raise
else:
    conn.commit()
finally:
    cursor.close()

のpython 2.6から始まっのsqlite Connectionオブジェクトが自動的にコミットまたはロールバックトランザクションにすることをコンテキストマネージャとして使用することができる。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top