Загрузка CSV в Postgresql с помощью psycopg2 - PullRequest
0 голосов
/ 07 октября 2019

hI Я пытаюсь загрузить файл csv в базу данных postgresql, используя python

В базе данных под названием "userspk" уже создана таблица с именем "DVD"

ниже приведены коды

import pandas as pd
import psycopg2 as pg2
conn = pg2.connect(database='DVD', user=xxx,password=xxx)


cur = conn.cursor()

def upload_data():
    with open('/Users/Downloads/DVDlist.csv', 'r') as f:
        next(f) #skips the header row
    cur.copy_from(f, 'userspk', sep=',')
    conn.commit()

upload_data()

продолжаю получать эту ошибку. Я бы подумал, что это должно быть довольно просто. Что-то не так с кодами?

/Users/pk/.conda/envs/Pk/bin/python /Users/pk/PycharmProjects/Pk/SQL_upload_file.py
Traceback (most recent call last):
  File "/Users/pk/PycharmProjects/Pk/SQL_upload_file.py", line 44, in <module>
    upload_data()
  File "/Users/pk/PycharmProjects/Pk/SQL_upload_file.py", line 37, in upload_data
    next(f)  # Skip the header row.
  File "/Users/pk/.conda/envs/Pk/lib/python3.5/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa3 in position 5718: invalid start byte

1 Ответ

1 голос
/ 07 октября 2019

Ошибка, похоже, исходит от следующей (f) функции, и поэтому не имеет ничего общего с psycopg2 или PostgreSQL. Похоже, в вашем файле есть символы, которые python считает недействительными как символы utf-8.

Этот файл, вероятно, на латинице 1, и это знак британского фунта стерлингов.

Выможет быть в состоянии исправить это, указав кодировку при открытии файла.

open('/Users/Downloads/DVDlist.csv', 'r',encoding="latin-1")

Но строки после заголовка также могут иметь некоторые проблемы.

...