2016-08-22 80 views
0

我在开始新项目PythonMySQLPython MySQL大容量插入错误与字符编码

我只是试图通过MySQLdb的包从CSV插入数以百万计的记录到MySQL的

我的代码:

import pandas as pd 
import MySQLdb 

#Connect with MySQL 
db = MySQLdb.connect('localhost','root','****','MY_DB') 
cur = db.cursor() 

#Reading CSV 
df = pd.read_csv('/home/shankar/LAB/Python/Rough/******.csv') 

for i in df.COMPANY_NAME: 
    i = i.replace("'","") 
    i = i.replace("\\","") 
    #i = i.encode('latin-1', 'ignore') 
    cur.execute("INSERT INTO polls_company (name) VALUES ('" + i + "')") 
db.commit() 

这段代码在某种CSV文件工作正常,但有少数中的CSV文件的问题。

错误:

--------------------------------------------------------------------------- 
UnicodeEncodeError      Traceback (most recent call last) 
<ipython-input-7-aac849862588> in <module>() 
13  i = i.replace("\\","") 
14  #i = i.encode('latin-1', 'ignore') 
---> 15  cur.execute("INSERT INTO polls_company (name) VALUES ('" + i + "')") 
16 db.commit() 

/home/shankar/.local/lib/python3.5/site-packages/MySQLdb/cursors.py in execute(self, query, args) 
211 
212   if isinstance(query, unicode): 
--> 213    query = query.encode(db.unicode_literal.charset, 'surrogateescape') 
214 
215   res = None 

UnicodeEncodeError: 'latin-1' codec can't encode character '\ufffd' in position 49: ordinal not in range(256) 

这里,只发生在一些CSV文件,这个“字符编码”的问题,但我想用普通编码技术自动插入。

因为CSV文件编码为 “UTF-8”, “Latin-1的” 更多...作品

如果我使用UTF-8:然后我得到错误Latin-1的 和反之亦然

那么,有没有经营的所有类型的CSV与普通编码文件

任何其他办法来解决这个什么方法?

[先谢谢了...]

回答

1

我先给大熊猫照顾编码的,你不通过你的DF需要循环。让我们做它的大熊猫的方式:

import pandas as pd 
import MySQLdb 

#Connect with MySQL 
db = MySQLdb.connect('localhost','root','****','MY_DB') 
cur = db.cursor() 

#Reading CSV 
df = pd.read_csv('/home/shankar/LAB/Python/Rough/******.csv') 

df.COMPANY_NAME.str.replace(r"['\]*", "").rename(columns={'COMPANY_NAME':'name'}).to_sql('polls_company', db, if_exists='append', index=False) 
+0

然后什么ABT,如果我处理多个列意味着什么? –

+0

但此代码生成错误为“错误:未终止的字符集在位置0” –