簡體   English   中英

使用pandas方法to_sql與MySQL時的另一個UnicodeEncodeError

[英]Another UnicodeEncodeError when using pandas method to_sql with MySQL

我幾天前在堆棧溢出上發布了一個類似的問題 (已經解決了),我不確定這里的禮儀是什么,但我正在發一個新帖子。

基本上,當我嘗試將pandas DataFrame寫入MySQL數據庫時,我得到一個UnicodeEncodeError。 我可以使用以下代碼重現錯誤:

import pandas as pd
from sqlalchemy import create_engine

engine = create_engine('mysql://root:@localhost/testdb')
df = pd.DataFrame([[u'\u2013',2],['e',4]], index = ['a','b'], columns = ['c','d'])
df.to_sql('data', engine, if_exists = 'replace', index = False)

這是錯誤:

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

這是追溯的最后一個相關行:

C:\Anaconda\lib\site-packages\sqlalchemy\dialects\mysql\mysqldb.pyc in do_executemany(self, cursor, statement, parameters, context)
     93 
     94     def do_executemany(self, cursor, statement, parameters, context=None):
---> 95         rowcount = cursor.executemany(statement, parameters)
     96         if context is not None:
     97             context._rowcount = rowcount

當我之前遇到此問題時,這是由於pandas.io.sql中的一個錯誤,修復程序是更改幾行代碼 這工作正常,直到我遇到拉丁-1編解碼器范圍之外的字符。

你們有什么建議嗎?

好吧,在發布我的問題后的一個小時內,我已經弄明白了。 也許我應該在發布之前做更多的研究。

問題是sqlalchemy需要配置為使用utf-8編碼。 上面代碼中的解決方案是將第3行更改為:

engine = create_engine('mysql://root:@localhost/testdb?charset=utf8', encoding = 'utf-8')

\–是一個“沖刺”。 也許一些文字處理器正在創造那個? 也許你會很開心一個簡單的-

請參閱https://docs.sqlalchemy.org/en/latest/dialects/mysql.html#mysql-unicode

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM