python-3.x - psycopg2.DataError : invalid input syntax for type double precision: "NULL"

标签 python-3.x postgresql csv psycopg2

我正在尝试使用 copy from 命令和 Python psycopg2 库上传 CSV 文件。我知道错误源于尝试将 char 值插入 double 列,但我在创建我的 csv 文件时将空值指定为 "NULL" 并且在 Postgres 复制命令中我还指定了空值作为 "NULL",所以我不确定为什么它在上传时不转换这些值。

创建 csv 文件:

with file_path.open(mode='w', newline='') as outfile:
    csv_writer = csv.writer(outfile, delimiter=delimiter, quoting=csv.QUOTE_NONNUMERIC)

    if include_headers:
        csv_writer.writerow(col[0] for col in self.cursor.description)
    for row in self.cursor:
        csv_writer.writerow(['NULL' if value is None else value for value in row])

上传文件到 postgres:

sql = """COPY {table} FROM STDIN WITH (DELIMITER '{sep}', NULL 'NULL', FORMAT CSV, HEADER True);""".format(table=table, sep=sep)

with open(file) as f:
    self.cursor.copy_expert(sql=sql, file=f, size=size)
self.commit()

错误:

psycopg2.DataError: invalid input syntax for type double precision:
"NULL" CONTEXT:  COPY test_table, line 25, column Lat:
"NULL"

最佳答案

您应该使用 QUOTE_MINIMAL,否则您的 None 将在文件中显示为 "NULL"(包括引号),这这就是它们无法被 COPY 正确识别的原因。

但我认为您不必经历所有这些,因为 COPY 能够很好地处理 CSV 文件。打开文件并使用 copy_fromcopy_to 方法。

关于python-3.x - psycopg2.DataError : invalid input syntax for type double precision: "NULL",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54987038/

相关文章:

c# - excel中的键盘快捷键csv文件列标题宽度自动调整

php - Codeigniter 将部分 CSV 数据插入 MYSQL 只有 id 和 date

random - Python-属性错误: 'int' object has no attribute 'randint'

python - QProgressBar不显示复制进度

postgresql - 需要要求 AWS RDS 上的 Postgres 用户使用密码登录

PostgreSQL SELECT 太慢

php - 从 CSV 文件中获取值并搜索 MySQL 数据库

python - 尝试以标识为列表的奇怪数据格式打印每个第 n 个元素

python-3.x - Intellij IDEA 导入类时出现问题, "cannot find reference"但代码仍然有效 - Python

perl - 使用 perl DBI 和 postgresql 的连接池