2017-03-28 14 views
0

私はPythonリストを持っていますcve_idpkg_name & vuln_statusです。pythonリストからpostgresqlテーブルにデータをコピー

from scanner import * 
import psycopg2 

try: 
    conn = psycopg2.connect(database="test", user="postgres",password="something", host="127.0.0.1", port="5432") 

except: 
    print "Database un-successfull" 
    quit() 

cur = conn.cursor() 

cur.execute("INSERT into vuln_data(cve_id, pkg_name, status) VALUES (%s,%s, %s)", (cve_id, pkg_name, vuln_status)) 

conn.commit() 
conn.close() 

を私が誰か場合

psycopg2.DataError: multidimensional arrays must have array expressions with matching dimensions

             ^

をというエラーが大好きだ取得:私は、私が試してみました何

PostgreSQLのテーブルをint型これらのリストからデータをインポートしたいのですがここで何ができるかを指摘することができます。

おかげ

+1

"cve_id"列は整数型(例:1,4,99)で、cve_idの値はtext [](例えば: '{blah、blah}')です。整数フィールド –

+0

@ VaoTsun質問を更新しました。新しいエラーを見てください。 –

+0

はcve_id値の例を示してください –

答えて

0

は、それ以外のタプルに変換し、リスト内の項目を順になっていることを確認し、次の

cur.execute("""INSERT into vuln_data(cve_id, pkg_name, status) VALUES (%s,%s, %s);""", (cve_id, pkg_name, vuln_status)) 

cur.executeコードを交換してみてください。

0

あなたのデータは、フォーム内にある場合:

[ 
    (val, val, val), 
    (val, val, val), 
    (val, val, val), 
] 

すると答えはcursor.executemany(SQL、データ)である:あなたのデータがこの形式でない場合は、

psycopg2: insert multiple rows with one query

それをzip()またはリスト内包表記でこの形式にします。

パフォーマンスに大きな影響があります。

  • 自動コミットがONの場合、クエリごとに1つのCOMMITが得られますが、これは地獄のように遅くなります。
  • 解決策1:BEGIN、executemany()、COMMIT。
  • 解決策2:上記のリンクを参照して、複数値のINSERTを作成し、単一のクエリとして実行します。
関連する問題