【问题标题】:Handle error with COPY command when using PostgreSQL使用 PostgreSQL 时使用 COPY 命令处理错误
【发布时间】: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


【解决方案1】:

您无法使用 COPY 命令执行此操作,但您可以修改目标表以接受这些数字字段的 NULL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-30
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多