psycopg2
データベースAPI を使用してPostgreSQL 9.3で作業しています。
DB APIを最小分離レベル(「自動コミット」モード)に設定していて、SQLを介して直接自分のトランザクションを管理しています。例:
cur = self.conn.cursor()
cur.execute("BEGIN;")
cur.execute("SELECT dbId, downloadPath, fileName, tags FROM {tableName} WHERE dlState=%s".format(tableName=self.tableName), (2, ))
ret = cur.fetchall()
cur.execute("COMMIT;")
基本的に、トランザクションはcur.execute("BEGIN;")
そのカーソルだけに限定されていますか、それとも接続全体に対するものself.conn.cursor()
ですか()?
私が行っているより複雑なことのいくつかは、論理的に機能に分解する複数の個別のデータベース操作を含みます。これはすべて、接続をメンバーとして持つクラス内にあるため、各関数内にカーソルを作成する方がはるかに便利です。ただし、トランザクション内でカーソルを作成する方法がわかりません。
基本的に、トランザクションが接続ごとの場合、トランザクション内で多数のカーソルをオンザフライで作成できます。カーソルごとの場合は、カーソルをあちこちに移動する必要があります。どっち?
あなたが呼び出すことができるという事実はかかわらドキュメントは、これに触れていないconnection.commit()
私が作る、かなりのトランザクション制御を接続ごとで自信を持って。