使用psycopg2将csv上载到postgresql
您好,我正在尝试使用python将csv文件上载到postgresql数据库 名为userspk的表已在名为DVD的数据库中创建 下面是代码使用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
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值上传