如何在Python2.7和SQLAlchemy中处理编码🏴‍☠️;

如何在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”编解

我用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”编解码器无法在中对字符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