Python Unicode、金字塔、UTF-8 MySQL表问题
我有一个Python2金字塔web应用程序,它使用SQLAlchemy与MySQL表对话,其中所有字符串列都是UTF-8编码的。当我把数据拉出来显示时,我必须使用Python Unicode、金字塔、UTF-8 MySQL表问题,python,mysql,unicode,utf-8,sqlalchemy,Python,Mysql,Unicode,Utf 8,Sqlalchemy,我有一个Python2金字塔web应用程序,它使用SQLAlchemy与MySQL表对话,其中所有字符串列都是UTF-8编码的。当我把数据拉出来显示时,我必须使用.decode(“UTF-8”)才能显示,否则我会得到ASCII无法解码的自然错误 我有两个问题: 是否有其他方法可以避免每次都需要.decode(“UTF-8”) 如果我想将某个内容推入数据库,并且我有一个字符串,它是s=u'str',那么当它被插入UTF-8列时,我需要对它做些什么吗 多谢各位 对于可能通过谷歌搜索找到此消息的人:
.decode(“UTF-8”)
才能显示,否则我会得到ASCII无法解码的自然错误
我有两个问题:
.decode(“UTF-8”)
s=u'str'
,那么当它被插入UTF-8列时,我需要对它做些什么吗.encode(..)
如果您的SQLAlchemy列的类型为而不是,SQLAlchemy将为您执行字符编码/解码(在您的示例中为to/from
UTF-8
)
请注意,列类型有一个convert\u unicode
参数,可以将该参数设置为True
,但这仅适用于数据库后端不支持本机unicode的极少数情况
正如@MartijnPieters在他的评论中提到的,您应该了解SQLAlchemy文档中的部分。也就是说,如果没有在与数据库的连接中使用以下命令显式设置字符编码:
# set client encoding to utf8; all strings come back as unicode
create_engine('mysql+mysqldb:///mydb?charset=utf8')
(以下主要引用自SQLAlchemy文档)
“[……]许多MySQL服务器安装默认为客户端连接的latin1
编码,这会将所有数据转换为latin1
,即使在表和列上配置了utf8
或其他字符集。MySQL Python接收到的charset参数也会对f启用使用\u unicode=1
”
“手动配置使用\u unicode=0
将导致MySQL python返回编码字符串:”
是否使用编码集连接到数据库?例如
create\u引擎('mysql+mysqldb:///mydb?charset=utf8)
。是的,的确如此。“charset=utf8&使用unicode=1”你好,Martijn。你的评论给了我一个想法。我将use_unicode从1切换到0,然后转到sqlachemy的Unidoe而不是String列。现在它起作用了。您认为这是正确的方法吗?使用charset=
setuse\u unicode
默认设置为1。我相信SQLAlchemy可以在use\u unicode
设置为1或0时正常工作;您应该使用Unicode类型而不是字符串,并且不要使用该标志。Martijn,这就是我遇到的问题。设置为1时,它不起作用。设置为0,突然工作,我不知道为什么。;-)你好,佩德罗。我将我的列(字符串(128))转换为列(Unicode(128)),但是在查询MySQL数据库之后,获得的数据仍然是'str'类型。你认为我可能做错了什么?连接字符串-就像Martin Pieters在注释中所说的那样-utf-8字符必须在连接时设置,当与MySQL对话时。你能从SQLAlchemy元数据重新创建数据库吗?如果MySQL列是一个VARCHAR
而不是一个NVARCHAR
,我认为您将具有所描述的行为。请尝试Pedro。非常感谢您的回复和时间。
# set client encoding to utf8; all strings come back as utf8 str
create_engine('mysql+mysqldb:///mydb?charset=utf8&use_unicode=0')