Python,Postgresql 从 csv 复制时遇到问题

Python, Postgresql trouble copying from csv

我这样做是为了测试。我想获取一个包含 headers 的 csv 文件并将值复制到 postgresql 数据库 table 中。 tables 列的名称与 csv 文件 case-sensitive 中的 headers 相同。 table 有两列 "pkey"、"m"。 csv 仅具有 header 的 "m"。 pkey 只是自动递增的主键设置。作为测试,我只想将 csv 文件中的 "m" 列复制到 table.

import csv
import psycopg2


database = psycopg2.connect ( database = "testing", user="**", 
password="**", host="**", port="**")

ocsvf = open("sample.csv")

def merger(conn, table_name, file_object):
    cursor = conn.cursor()
    cursor.copy_from(file_object, table_name, sep=',', columns=('mls'))
    conn.commit()
    cursor.close()

try:
    merger(database, 'tests', ocsvf)
finally:
    database.close()

当我尝试 运行 代码时,我得到了这个错误

Traceback (most recent call last):
  File "csvtest.py", line 26, in <module>
merger(database, 'tests', ocsvf)
  File "csvtest.py", line 21, in merger
cursor.copy_from(file_object, table_name, sep=',', columns=('m'))
  psycopg2.ProgrammingError: column "m" of relation "tests" does not exist

我确信它很简单,我一直在看,但我也用谷歌搜索了这个,我发现的一件事是有人说它可能是主键设置正确但我测试了它并且主键工作当我从 pgadmin 手动输入时很好。任何帮助都将非常感谢

这一行:

cursor.copy_from(file_object, table_name, sep=',', columns=('mls'))

('mls') 的计算结果为 "mls",这最终意味着对其进行迭代将产生 3 个项目 ['m','l','s']。 你应该这样写这一行:

cursor.copy_from(file_object, table_name, sep=',', columns=('mls',))

表达式 ('mls',) 计算为包含一项的元组:"mls",我想这就是你想要做的。