15

多数の (最大 25 までの) テーブルで変更する必要があるユーザー名があります。(ええ、私は知っています。) アトミック トランザクションは、この種のことを行う方法のようです。ただし、pyodbc でこれを行う方法がわかりません。以前にアトミック トランザクションに関するさまざまなチュートリアルを見たことがありますが、それらを使用したことはありません。

セットアップ: Windows プラットフォーム、Python 2.6、pyodbc、Microsoft SQL 2005。単一の SQL ステートメントには pyodbc を使用しましたが、複合ステートメントやトランザクションは使用しませんでした。

SQL のベスト プラクティスは、ストアド プロシージャの作成が優れていることを示唆しているようです。ストアド プロシージャを実行することに対する私の懸念は、重要度の高い順に次のとおりです。 1) ストアド プロシージャを作成したことがありません。2) pyodbc はまだストアド プロシージャからの結果を返さないと聞きました。3) これは間違いなく Not My Database です。ベンダー提供、ベンダー更新などです。

それで、これについて行く最善の方法は何ですか?

4

2 に答える 2

24

そのドキュメントによると、pyodbc はトランザクションをサポートしていますが、odbc ドライバーがサポートしている場合のみです。さらに、pyodbc はPEP 249に準拠しているため、手動コミットが行われた場合にのみデータが保存されます。これは、トランザクションまたはトランザクション全体
を明示的に行う必要があることを意味します。commit()rollback()

pyodbc は自動コミット機能もサポートしていることに注意してください。その場合、トランザクションを持つことはできません。
デフォルトでは自動コミットはオフになっていますが、コードベースでオンになっている可能性があります。実行時に接続を確認する必要があります

cnxn = pyodbc.connect(cstring, autocommit=True)

または、自動コミット モードを明示的にオフにすることもできます。

cnxn.autocommit = False

しかし、これはシステムに非常に大きな影響を与える可能性があります。

注: pyodbc の自動コミット モードの詳細については、wikiを参照してください。

于 2009-06-30T14:57:31.403 に答える
-9

pyodbc がトランザクションをサポートしているとは思いません。トランザクションを開始/コミット/ロールバックするには、SQL コマンドを送信する必要があります。

于 2009-06-30T14:05:06.097 に答える