使用psycopg2将csv上载到postgresql

使用psycopg2将csv上载到postgresql,postgresql,file-upload,psycopg2,Postgresql,File Upload,Psycopg2,您好,我正在尝试使用python将csv文件上载到postgresql数据库 名为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/DVDl

您好,我正在尝试使用python将csv文件上载到postgresql数据库

名为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

错误似乎来自nextf函数,因此与psycopg2或PostgreSQL无关。看起来您的文件中有Python认为UTF-8字符无效的字符。

这个文件可能是拉丁文1,这是英镑符号

您可以通过在打开文件时指定编码来修复它

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

但是标题后面的行也可能有一些问题。

谢谢@jjanes。你是对的,问题出在数据上。我的档案中有一些不适用。任何关于如何解决这些问题的线索。我是否需要在上传前清理数据,或者我可以添加一个代码来忽略N/a?另外,如果中间有任何空白值,它就会给我这个错误PycPcg2.DATaError:双精度类型的无效输入语法:上下文:复制用户ESPK,第4行,列信用:有什么想法来解决这个问题?为什么有空行?移除它们,或者修复创建它们的东西。也许您可以在python中创建一个迭代器,其行为类似于文件句柄,但不会传递空行。这将是一个纯粹的python问题,适用于不同的问题。不是空行,而是空白单元格。如果有一个空白单元格,我无法删除整行。但我发现我可以通过在copy_from函数中添加null=将它们作为null值上传