2016-08-22 25 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」 –