将数据从python列表复制到postgresql表

时间:2017-03-28 12:03:11

标签: python postgresql

我有一个python列表cve_idpkg_name& vuln_status。我想在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:多维数组必须具有匹配维度的数组表达式

                                                         ^

如果有人能在这里指出可以做些什么,那就太爱了。

由于

2 个答案:

答案 0 :(得分:1)

如果您的数据采用以下格式:

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

然后答案是cursor.executemany(sql,data):

psycopg2: insert multiple rows with one query

如果您的数据不是这种形式,请使用zip()或列表推导将其放在此表单中。

存在巨大的性能影响。

  • 如果Autocommit为ON,则每个查询会收到一个COMMIT,这将会很慢。
  • 解决方案1:BEGIN,然后是executemany(),然后是COMMIT。
  • 解决方案2:请参阅上面的链接,创建一个多值INSERT并将其作为单个查询执行。

答案 1 :(得分:0)

尝试使用以下

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

确保列表中的项目按顺序排列,否则将其转换为元组。