Python: запись значений из CSV-файла в базу данных postgresql - PullRequest
0 голосов
/ 26 ноября 2018

Я сделал Python-скрипт, который принимает файл Excel, преобразует его в CSV-файл.Моя проблема заключается в том, что у меня есть несколько нулевых значений в моем CSV, который должен быть нулевым, но при попытке вставить его в базу данных, я получаю эту ошибку

psycopg2.DataError: invalid input syntax for type date: "None"
LINE 1: ...', 'Some info here', 'And some more', '1995-09-06', 'None'

Это код, который я написал для преобразованияExcel-файлы в CSV

def excel_to_csv():
    xlsx = pd.read_excel(excel_path + fileName + '.xlsx')
    xlsx.to_csv(csv_file, encoding='utf-8', index=False, na_rep=None, quoting=csv.QUOTE_NONE)


    excel_to_csv()

И когда я проверяю CSV-файл, все форматируется правильно, со значениями, разделенными на, и нулевым значением является None, без кавычек.Кажется, что проблема начинается, когда я пытаюсь прочитать CSV-файл и затем вставить его в базу данных.Я использую csv.reader для этого

with open(csv_file, 'rb') as f:
    reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
    next(reader)
    for row in reader:
        cur.execute(
            "INSERT INTO databasetable (foo, foo2, foo3, foo4) VALUES (%s, %s, %s, %s);",
            row
        )

Кто-нибудь знает, что здесь не так?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Редактировать: я вижу, что читатель CSV выдает вам списки строк, поэтому я редактирую свой пример соответственно

Postgres не распознает "None" (но ваш sql API явно распознает None.) Вы можете попробовать заменить все "None" на None.Что-то вроде:

for row in reader:
    clean_row = []
    for x in row:
        if x == 'None':
             clean_row.append(None)
        else:
             clean_row.append(x)
    cur.execute(
            "INSERT INTO databasetable (foo, foo2, foo3, foo4) VALUES (%s, %s, %s, %s);",
            clean_row
        )
0 голосов
/ 26 ноября 2018

Я думаю, вам нужно, чтобы оно было NULL, а не None.Смотрите: postgresql вставляет нулевое значение по запросу .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...