如何在Python2.7和SQLAlchemy中处理编码🏴☠️;
我用Python3.5编写了一段代码,当时我使用Tweepy和SQLAlchemy&以下几行代码将tweet加载到数据库中,效果很好:如何在Python2.7和SQLAlchemy中处理编码🏴☠️;,python,mysql,unicode,encoding,utf-8,Python,Mysql,Unicode,Encoding,Utf 8,我用Python3.5编写了一段代码,当时我使用Tweepy和SQLAlchemy&以下几行代码将tweet加载到数据库中,效果很好: twitter = Twitter(str(tweet.user.name).encode('utf8'), str(tweet.text).encode('utf8')) session.add(twitter) session.commit() 现在在Python 2.7中使用相同的代码会引发错误: UnicodeEncodeError:“ascii”编解
twitter = Twitter(str(tweet.user.name).encode('utf8'), str(tweet.text).encode('utf8'))
session.add(twitter)
session.commit()
现在在Python 2.7中使用相同的代码会引发错误:
UnicodeEncodeError:“ascii”编解码器无法在中对字符u'\u2026'进行编码
位置139:序号不在范围内(128)
解决办法是什么?我的MySQL配置如下:
服务器端-->utf8mb4编码
客户端-->创建引擎('mysql+pymysql://abc:def@abc/def',encoding='utf8',convert_unicode=True)
):
更新
似乎没有解决方案,至少Python2.7+SQLAlchemy没有。这是我到目前为止发现的,如果我错了,请纠正我
至少在Python2.7中,Tweepy返回unicode类型的对象
在Python 2.7中:tweet=u'☠'
是一个
在Python 3.5中:tweet=u'☠'
是一个
这意味着,如果我执行str(tweet)
,Python 2.7将给我一个“UnicodeincoderError”,因为Python 2.7会尝试对这个字符进行编码☠' 转换为ASCII,这是不可能的,因为ASCII只能处理
结论:
在SQLAlchemy行中仅使用此语句tweet.user.name
,会产生以下错误:
UnicodeEncodeError:“latin-1”编解码器无法在中编码字符
位置0-4:序号不在范围内(256)
在SQLAlchemy行中使用此语句tweet.user.name.encode('utf-8')
,或者使用此语句str(tweet.user.name.encode('utf-8'))
,实际上应该是正确的,但它在数据库端显示了未编码的字符:
杰克·斯派洛
这就是我想让它展示的:
打印:
不要使用任何编码/解码功能;它们只会使问题更加复杂
请将连接设置为UTF-8。
请将列/表设置为utf8mb4而不是utf8。
在Python代码的开头一定要使用#-*-coding:utf-8-*-
更多注意的是,它有一个指向“Python2.7问题;Python3的改进”的链接。这个:-*-编码:utf-8-*-
只是一个注释,只是一个约定,或者它是否给代码带来了任何价值?-*-编码:utf-8-*-
告诉解释器在解析文件时使用哪种编码,它只影响包含非ascii字符(文字)的文件。它不会以任何其他方式影响代码。另外,请查看,您需要将?charset=…
添加到连接url以更改连接charsetTypo:☠代码>是代码点\u2620
。