psycopg2.DataError: неверный синтаксис ввода для типа с двойной точностью: "NULL" - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь загрузить файл CSV, используя копию из команды и библиотеку Python psycopg2.Я понимаю, что ошибка связана с попыткой вставить значение символа в столбец с двойной точностью, но я указал нулевые значения как "NULL" при создании моего файла CSV и в команде копирования 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"

1 Ответ

0 голосов
/ 04 марта 2019

Вы должны использовать QUOTE_MINIMAL, иначе ваши None s будут отображаться как "NULL" (включая кавычки) в файле, поэтому они не распознаются COPY.

* 1006 должным образом.* Но я думаю, что вам не нужно проходить через все это, поскольку COPY умеет отлично работать с файлами CSV.Откройте файл и используйте методы copy_from и copy_to.
...