3

我有一个使用 Flask、SQLAlchemy 和 MySQL 编写的 Web 应用程序。当我通过表单(例如request.form['Username'])提交字符串时,它们通过 SQLAlchemy 提交,并最终作为 Unicode 字符串提交给 MySQL。我的数据库使用的是 latin-1 字符集,所以我真的很想在整个过程中使用 latin-1。有没有办法强制 Flask 或 SQLAlchemy 始终使用/转换为 latin-1 而无需手动执行string.encode('latin-1')

作为这如何导致问题的示例,当我执行 aSELECT...WHERE Name=:name并提供request.form['Name']作为绑定参数时,它会通过 asu'Some Name'并因此找不到任何匹配项。

4

2 回答 2

6

您可以在连接参数中设置 SQLAlchemy 连接到 MySQL 的编码:

create_engine('mysql+mysqldb:///mydb?charset=latin1')

请参阅MySQL 上的 SQLAlchemy 文档,unicode 部分

于 2012-08-03T16:20:03.920 回答
2

首先,阅读 Flask 网站上的 unicode 章节:http: //flask.pocoo.org/docs/unicode/。它说“如果你在 Python 文件中使用非 Unicode 字符,你必须告诉 Python 你的文件使用哪种编码。”

为此,您可以在 python 文件的开头添加以下内容。这告诉解释器使用什么编码。

# coding: latin1
于 2012-08-03T16:21:54.277 回答