gpt4 book ai didi

python - 将 TXT 加载到 postgres 数据库中,将不存在的列填充为 null

转载 作者:搜寻专家 更新时间:2023-10-30 20:52:59 26 4
gpt4 key购买 nike

我是一个 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。)

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 - 将 TXT 加载到 postgres 数据库中,将不存在的列填充为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35282630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com