【发布时间】:2016-01-31 14:34:30
【问题描述】:
我有一个 Python 脚本正在执行以下命令来将 CSV 文件的内容复制到数据库:
copy_query = "COPY table_name FROM STDIN DELIMITER '%s' CSV HEADER QUOTE '\"';" % (self.delimiter)
table_name 表示已创建的具有特定类型的表。 CSV 文件中的数据并不总是与列类型匹配。例如,CSV 文件可能是这样的:
"row1", 123, "2012-11-11"
"row2", 346, "2012-11-12"
"row3", \N, "2012-11-12"
如您所见,第 2 列的类型应该是 int,但由于第 3 行的数据与 int 类型不匹配,因此整个操作失败。有没有办法完全拒绝这一行?我希望它填写一些适当类型的默认值,但是完全拒绝该行也可以。感谢您的帮助!
【问题讨论】:
-
目前(至少 9.5 和更早版本)PostgreSQL 无法让您像这样转换或过滤
COPY中的行。通常的解决方案是导入一个包含所有text列的临时/未记录表,然后执行insert into ... select ...对其进行转换。查看许多现有的相关答案。
标签: python database postgresql csv psycopg2