我對charset和encoding工作在SQLAlchemy的方式非常困惑。我瞭解(並已閱讀)charsets and encodings之間的區別,我對the history of encodings有很好的瞭解。如何在SQLAlchemy的`create_engine`中使用`charset`和`encoding`(來創建熊貓數據框)?
我在MySQL中latin1_swedish_ci (爲什麼?可能因爲this)表。我需要創建一個熊貓數據框,在其中獲取正確的字符(而不是奇怪的符號)。最初,這是代碼:
connect_engine = create_engine('mysql://user:[email protected]/db')
sql_query = "select * from table1"
df = pandas.read_sql(sql_query, connect_engine)
我們開始有與Š
字符的麻煩(對應於u'\u0160'
unicode的,而是我們得到「\ x8a」)。我預計這個工作:
connect_engine = create_engine('mysql://user:[email protected]/db', encoding='utf8')
,但是,我要繼續'\x8a'
,我意識到這,是有道理鑑於編碼參數的默認值是utf8
。所以,後來,我試着encoding='latin1'
來解決這個問題:
connect_engine = create_engine('mysql://user:[email protected]/db', encoding='latin1')
,但是,我仍然得到同樣的 '\ x8a'。要清楚,在這兩種情況下(encoding='utf8'
和encoding='latin1'
),我可以做mystring.decode('latin1')
但不是mystring.decode('utf8')
。
然後,我重新發現連接字符串中的charset
參數,即'mysql://user:[email protected]/db?charset=latin1'
。並試圖字符集和編碼的所有可能的組合之後,我發現這個工作:
connect_engine = create_engine('mysql://user:[email protected]/db?charset=utf8')
我將不勝感激,如果有人可以解釋我如何正確使用charset
連接字符串中,並在encoding
參數create_engine
?
感謝@univerio,我仍然得到一個有點失落,因爲有好幾個名字,我不都將它們放置:(?DBAPI)*數據庫 - - >蟒蛇驅動程序>的mysql-python的界面 - > SQLAlchemy的* 。驅動程序是否與界面和DBAPI相同? –
@toto_tico驅動程序與DBAPI相同。 (從技術上講,DBAPI是由PEP 249定義的接口,驅動程序是實現此接口的庫,但不需要這麼迂腐。)所以它是* database - > driver/DBAPI - > SQLAlchemy *。 – univerio