1

テキストファイルで何らかの処理を行うpythonスクリプトを書いています。そのプロセスの一環として、タブ区切りファイルの各行をローカルの MS SQL Server (2008) テーブルにインポートする必要があります。私はpyodbcを使用していますが、これを行う方法を知っています。ただし、それを実行する最良の方法について質問があります。

ファイルをループして、ファイルの各行に対して cursor.execute(myInsertSQL) を作成します。すべてのレコードがループされるまでステートメントをコミットするのを待っているときに問題が発生することはありますか (つまり、ループの後に commit() を実行し、個々の実行後にループ内では実行しない)。私が尋ねる理由は、ファイルによっては 5000 行以上になるものがあるからです。「それらを保存」しようとして、一度に 5000 個すべてをコミットすると問題が発生するかどうかはわかりませんでした。

私はPythonにかなり慣れていないので、これらの問題のすべてをまだ知りません。

ありがとう。

4

2 に答える 2

0

あなたが何をしているのか理解できれば、Python は問題になりません。トランザクション内でステートメントを実行しても、Python では累積状態は作成されません。これは、データベース サーバー自体でのみ行われます。

コミットするときは、コミットが行われたことを確認する必要があります。これは、大きなバッチ コミットを行うと、データベース内の途中の変更と競合する可能性があるためです。コミットが失敗した場合は、バッチを再度実行する必要があります。

これは、大きなバッチと Python/ODBC で私が認識している唯一の問題です (実際には Python の問題ではありません。関係なくその問題が発生するからです)。

ここで、すべての SQL をメモリ内に作成し、メモリ表現をループする場合は、より理にかなっている可能性があります。それでも、最新のマシンで 5000 行のテキストは、それほど大したことではありません。2 桁以上の処理が必要になった場合は、プロセスを再考する必要があるかもしれません。

于 2009-08-25T00:47:19.563 に答える
0

ファイルを作成し、BULK INSER T を使用します。より高速になります。

于 2009-08-25T03:16:43.593 に答える