首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘'ascii’编解码器无法在942位置解码字节0xdb :序数不在范围(128) SQLAlchemy (Django)

‘'ascii’编解码器无法在942位置解码字节0xdb :序数不在范围(128) SQLAlchemy (Django)
EN

Stack Overflow用户
提问于 2016-01-31 06:12:44
回答 1查看 703关注 0票数 0

我在mysqldb上使用SQLAlchemy查询和utf-8编码,当我在mysqldb上使用run查询时,我得到了输出,但是在python上运行代码我得到了错误:

代码语言:javascript
复制
'ascii' codec can't decode byte 0xdb in position 942: ordinal not in range(128) 

查询:

代码语言:javascript
复制
  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:

代码语言:javascript
复制
e = create_engine("mysql+pymysql://@localhost/test?charset=utf8")

你有决心吗?

谢谢,

EN

回答 1

Stack Overflow用户

发布于 2016-01-31 07:31:43

Python 2默认使用字节字符串(ASCII)字符串,它只支持拉丁字符。Python 3默认使用Unicode字符串。

正如我所看到的,您在查询中使用了一些阿拉伯脚本,因此您可能会得到一些响应。错误说,很明显,Python不能将阿拉伯字符解码为ASCII。要处理阿拉伯字符(或任何其他非拉丁字符),您必须在Python中使用unicode。注意:它与您提供的unicode设置无关,它只影响数据库。

所以你的选择是:

  1. 切换到Python 3。
  2. 保持原样,但是在每个模块的开头添加from __future__ import unicode_literals,默认情况下启用对字符串使用unicode。
  3. 每次使用encode/decode操作unicode和字节字符串,但这是最糟糕的解决方案。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35110954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档