私はPythonの初心者ですので、私が見つけたものからスクリプトをハッキングしていて、うまくいっています(一番上品でないまたは修正する)。私の最終的な目標は、csvをとり、それを読んで、段階を見つけ、そのフレーズが見つかった場合にその行をSQLデータベースに書き込むことです。私はこの作業を持っていますが、私の質問はこれです:Python SQLの1つのコミット対複数のコミットを使用
私は(私が今やっているされているもの)with
のすべてのループの内側.execute()
、その後.commit()
を書くべきか?あるいは、私は単一のステートメントを作成し、最後に実行/コミットする必要があります(これを行う方法がわからない場合)。私はthis postを読んで、インサートをどのようにフォーマットするのか見ていますが、私のコードをどうやって取得するのかは分かりません。どのような助けやアドバイスが最初の方法はちょうど良いまたは適切な方法は、2番目の方法は素晴らしいだろう!前もって感謝します!
背景:私はpypyodbcとVMを使用しています。 Pythonスクリプトは、SQL Expressデータベースと同じVMにあります。ここで
は私のコードです:
with open(CSVFILE, 'rt', encoding='utf8') as f:
if debug:
print('Inside the with')
reader = csv.reader(f, delimiter=',')
columns = next(reader)
query = 'insert into TABLENAME ({0}) values ({1})'
query = query.format(','.join(columns), ','.join('?' * len(columns)))
for row in reader:
for field in row:
if data.strSearch in field:
if debug:
print('Found: {}'.format(row[0]))
cursor.execute(query, row)
cursor.commit()
代わりに、各ループの各「行」を別のリストに追加して、ネストされたリストを与えることができます。すべてのループを終了したら、 'executemany()'を呼び出して 'execute()'の代わりにlist_of_rowsを渡してレコードを一度に挿入し、変更を 'commit()'することができます。しかし、内部ループの各繰り返しでの 'commit()'は厳密には必要ではなく、実行時間を増加させます。 – roganjosh