2016-09-19 4 views
0

私は以下のpythonコードを使用して、Idに基づいてpostgres DBカラムvalueを更新しています。このループは何千ものレコードに対して実行する必要があり、時間がかかります。バルクアップデートpythonデータフレームのPostgresカラム

各行をループするのではなく、データフレームの値の配列を渡す方法はありますか?

for i in range(0,len(df)): 
     QUERY=""" UPDATE "Table" SET "value"='%s' WHERE "Table"."id"='%s' 
      """ % (df['value'][i], df['id'][i]) 
     cur.execute(QUERY) 
     conn.commit() 
+0

で任意のアイデアを先テーブルを更新してください? – Prasad

答えて

0

あなたは、PostgreSQLとの通信に使用ライブラリに依存するが、通常は一括挿入はCOPY FROMコマンドを経由してはるかに高速です。

あなたはそれpsycopg2使用する場合は、次のように簡単です:

cursor.copy_from(io.StringIO(string_variable), "destination_table", columns=('id', 'value')) 

string_variable1\tvalue1\n2\tvalue2\nのようなタブと改行区切りのデータセットであるところ。一時テーブルを作成

  1. ::私はどうなるパフォーマンスの一括更新を達成するために

    CREATE TEMPORARY TABLE tmp_table;を。

  2. copy_fromでレコードを挿入します。

  3. ちょうどクエリUPDATE destination_table SET value = t.value FROM tmp_table t WHERE id = t.idまたは任意のother preferred syntax

関連する問題