我在mysqldb上使用SQLAlchemy查询和utf-8编码,当我在mysqldb上使用run查询时,我得到了输出,但是在python上运行代码我得到了错误:
'ascii' codec can't decode byte 0xdb in position 942: ordinal not in range(128) 查询:
query = """SELECT * FROM (SELECT p.ID AS 'persons_ID', p.FirstName AS 'persons_FirstName', p.LastName AS 'persons_LastName',p.NationalCode AS 'persons_NationalCode', p.CityID AS 'persons_CityID', p.Mobile AS 'persons_Mobile',p.Address AS 'persons_Address', cities_1.ID AS 'cities_1_ID', cities_1.Name AS 'cities_1_Name',cities_1.ParentID AS 'cities_1_ParentID', cities_2.ID AS 'cities_2_ID', cities_2.Name AS 'cities_2_Name',cities_2.ParentID AS 'cities_2_ParentID' , cast(@row := @row + 1 as unsigned) as 'persons_row_number' FROM Persons p LEFT OUTER JOIN cities AS cities_2 ON cities_2.ID = p.CityID LEFT OUTER JOIN cities AS cities_1 ON cities_1.ID = cities_2.ParentID , (select @row := 0) as init WHERE 1=1 AND p.FirstName LIKE N'{}%'""".format('رامین')Conntector字符集Mysql:
e = create_engine("mysql+pymysql://@localhost/test?charset=utf8")你有决心吗?
谢谢,
发布于 2016-01-31 07:31:43
Python 2默认使用字节字符串(ASCII)字符串,它只支持拉丁字符。Python 3默认使用Unicode字符串。
正如我所看到的,您在查询中使用了一些阿拉伯脚本,因此您可能会得到一些响应。错误说,很明显,Python不能将阿拉伯字符解码为ASCII。要处理阿拉伯字符(或任何其他非拉丁字符),您必须在Python中使用unicode。注意:它与您提供的unicode设置无关,它只影响数据库。
所以你的选择是:
from __future__ import unicode_literals,默认情况下启用对字符串使用unicode。encode/decode操作unicode和字节字符串,但这是最糟糕的解决方案。https://stackoverflow.com/questions/35110954
复制相似问题