我对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