【发布时间】:2016-05-18 21:10:21
【问题描述】:
我是一个 python 新手,如果有一个我看不到的简单解决方案,请原谅我。我有大量 txt 文件 (~280) 需要读入 postgres 数据库中的表。该表的结构使其包含 txt 文件中存在的所有可能的列/变量。考虑下面的例子......
file1.txt:
ID | Var_A | Var_B
1 | Apple | Dog
2 | Peach | Bird
file2.txt:
ID | Var_A | Var_C
5 | Grape | Cat
3 | Apple | Dog
file3.txt:
ID | Var_B | Var_C
7 | Apple | Cat
6 | Peach | Bird
理想情况下,我希望我的表包含 txt 文件中的所有数据,以及 txt 文件中不存在的列/变量,记录为空白或 null。 (为了演示和清楚起见,我在下面将它们写为 null。)
postgres_table:
ID | Var_A | Var_B | Var_C
1 | Apple | Dog | NULL
2 | Peach | Bird | NULL
3 | Apple | NULL | Dog
5 | Grape | NULL | Cat
6 | NULL | Peach | Bird
7 | NULL | Apple | Cat
鉴于文件数量众多,这个过程需要自动化。我一直在 python 中使用 psycopg2 来完成这项任务,并且之前已经做了很多尝试,但都没有成功。我相信COPY 查询将是最有效的,(有数百万行数据,)但我在尝试复制时遇到了 txt 文件中不存在的列。
cursor = db.cursor()
query = "COPY postgres_table FROM '{}'(DELIMITER('|'));".format(~/file1.txt)
cursor.execute(query)
db.commit()
此查询产生以下错误:
psycopg2.DataError: missing data for column "Var_C"
也许有人能看到我看不到的东西。我也对该任务的其他潜在解决方案感兴趣。
【问题讨论】:
标签: python database postgresql psycopg2