从 CSV 文件写入数据时出现 psycopg2 错误:最后一个预期列之后的额外数据



我正在尝试将数据从csv文件(file.csv(插入Postgres表格的两列中。数据如下所示:

#Feature AC;Feature short label
EBI-517771;p.Leu107Phe
EBI-491052;p.Gly23Val
EBI-490120;p.Pro183His
EBI-517851;p.Gly12Val
EBI-492252;p.Lys49Met
EBI-527190;p.Cys360Ser
EBI-537514;p.Cys107Ser

我正在运行的代码如下:

# create table in ebi_mut_db schema
cursor.execute("""
CREATE TABLE IF NOT EXISTS ebi_mut_db.mutations_affecting_interactions(
feature_ac TEXT,
feature_short_label TEXT)
""")
with open(file.csv', 'r') as f:
# Notice that we don't need the `csv` module.
next(f) # Skip the header row.
cursor.copy_from(f, 'ebi_mut_db.mutations_affecting_interactions', sep=';')
conn.commit()

表已创建,但在写入数据时,它显示以下错误。

Traceback (most recent call last):
File "stdin<>", line 38, in <module>
cursor.copy_from(f, 'ebi_mut_db.mutations_affecting_interactions', sep=';')
psycopg2.errors.BadCopyFileFormat: extra data after last expected column
CONTEXT:  COPY mutations_affecting_interactions, line 23: "EBI-878110;"p.[Ala223Pro;Ala226Pro;Ala234Asp]""

除了这两个列之外,没有额外的列。我的理解是代码检测到 2 列以上。

谢谢

您尚未告诉 COPY 您使用的是 CSV 格式,因此它使用的是默认的 TEXT 格式。 在这种格式中,引号不保护特殊字符,并且由于有多个;因此具有两列以上。

如果你想让 COPY 知道引号内的;不算作分隔符,那么你必须告诉它使用 CSV 格式。 在 psycopg2 中,我认为您必须使用 copy_expert,而不是copy_from,才能完成此操作。

相关内容

最新更新