【问题标题】:Flask/SQLAlchemy - How to globally use latin-1 instead of UTF-8?Flask/SQLAlchemy - 如何全局使用 latin-1 而不是 UTF-8?
【发布时间】:2012-08-03 16:06:18
【问题描述】:

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

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

【问题讨论】:

  • 一条评论绝对不是一个有用的答案:我坚信你正朝着错误的方向前进。您应该努力使用 UTF-8 troughout,而不是相反。正如我所见,我看不出有任何理由坚持使用 Latin-1,尤其是因为您正在那里处理用户输入。 Latin-1 是不够的。我的波兰朋友一定会同意的。
  • 我相信这通常是正确的,但是这是一个仅供几个人内部使用的系统,不需要任何特殊字符。
  • 而 640K 对于每个人来说应该足够了。对不起,无法抗拒。系统有致命的进化趋势,我最近遇到了太多的编码问题。
  • 我一定会牢记您的 cmets 并考虑。 :)

标签: python mysql unicode sqlalchemy flask


【解决方案1】:

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

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

请参阅SQLAlchemy documentation on MySQL, unicode section

【讨论】:

  • 谢谢,我回家后会试试这个并可以访问我的代码!
【解决方案2】:

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

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

# coding: latin1

【讨论】:

  • 谢谢,我也试试这个!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2017-09-28
  • 1970-01-01
  • 2014-11-11
  • 2010-10-12
  • 2010-09-21
相关资源
最近更新 更多