2016-08-22 13 views
0

私はのPythonの新しいプロジェクトを開始します。です。Python 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ファイルで発生しているが、私は、共通の符号化技術と自動挿入をしたいです。 "UTF-8"、 "ラテン-1" とよりを持つCSVファイルのエンコードされた作品のため

...

私はUTF-8を使用する場合:私は、ラテン-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に" –