【发布时间】:2019-05-01 02:06:07
【问题描述】:
我正在尝试遍历一系列 CSV 文件(所有这些文件都具有相同的表结构),使用 for 循环读取每个 CSV 文件,将其写入 postgresql 表(与 CSV 文件的结构相同),并且迭代到下一个 CSV 文件。
我想要迭代大约 600 个 CSV,我的 for 循环在前 33 次迭代中完美运行,但由于某种原因,之后的每次迭代都失败了。
起初我认为这是我在我的 postgrgesql 表中的字段上放置的约束(即 NOT NULL/UNIQUE 约束)的问题。但是,当我尝试通过 Postico 手动编写任何文件时,它们会毫无问题地提交(这也消除了任何数据类型不匹配作为我认为的潜在原因?)。
import psycopg2
from lister import list_generator
conn = psycopg2.connect("host=localhost dbname=backend user=macbookpro")
cur = conn.cursor()
list = list_generator('testing.csv')
n = 0
for a in list:
try:
with open('Testing/'+ str(a) +'.csv', 'rb') as f:
next(f)
cur.copy_from(f, 'table1', sep=',')
conn.commit()
print(str(n) + " " + str(a) + " completed")
n += 1
except:
print(str(n) + " " + str(a) + " failed")
n += 1
pass
【问题讨论】:
-
失败时会收到什么错误信息?
-
因为我将它嵌套在 try/except 块中,所以我得到的消息是在 except 块中指定的打印语句。让我删除 try/except 块,我会更新。谢谢尼克。
-
看起来毕竟是数据类型错误。引发以下错误:psycopg2.DataError:类型双精度的无效输入语法:“”。奇怪的是,手动导入时不会发生数据类型错误,不是吗?
标签: python python-3.x postgresql csv