【问题标题】:Flask SQLAlchemy can't insert emoji to MySQLFlask SQLAlchemy 无法将表情符号插入 MySQL
【发布时间】:2017-09-19 08:30:30
【问题描述】:

我正在使用 Python 2.7 和带有 flask-sqlalchemy 模块的烧瓶框架。

尝试插入时总是出现以下异常:Exception Type: OperationalError. Exception Value: (1366, "Incorrect string value: \xF09...

我已经将 MySQL 数据库、表和对应列设置为utf8mb4_general_ci,我可以使用终端插入表情符号字符串。

Flask 的应用配置已经包含 app.config['MYSQL_DATABASE_CHARSET'] = 'utf8mb4',但它根本没有帮助,我仍然得到异常。

感谢任何帮助

【问题讨论】:

    标签: python mysql flask


    【解决方案1】:

    也许将来有人会这样: 我所做的只是在我的配置文件中编辑 sql 连接:

    SQLALCHEMY_DATABASE_URI = 'mysql://user:password@localhost/database?charset=utf8mb4'
    

    这样我就可以在不更改数据库或表的情况下存储表情符号。

    来源:https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-database/page/13%0A 评论 #322

    【讨论】:

    • 你!救了我的命!
    【解决方案2】:

    它对我有用:

     import pickle 
     data = request.get_json().get("data") 
     data = pickle.dumps(data) 
    

    然后你可以将“数据”输入到数据库中。

    您可以发送“?”之类的“数据”...任何您喜欢的表情符号。

    下一次,当你从数据库中获取“数据”时:

    你应该:

    data = pickle.loads(data) 
    

    那么你可以得到“数据”为“?”

    【讨论】:

      【解决方案3】:
      1. 添加配置文件主文件并设置设置'charset' => 'utf8mb4'
      2. 您必须编辑要存储表情符号的字段并将collation 设置为utf8mb4_unicode_ci

      【讨论】:

      • 感谢您的回答!我已经设置了排序规则,忘记提及了,对不起。你能指定“配置文件主文件”的意思吗
      • 我的意思是在你的配置文件中意味着你为项目和所有其他东西定义你的数据库
      • 先生,“app.config”字典中没有“charset”字段,只有可以关联的字段称为“mysql_database_charset”,我已经更改了。
      • 检查一下:stackoverflow.com/questions/38636783/… 可能会有所帮助
      • 我已经可以使用我的终端添加行了,所以这不是 mysql 的问题。我认为它应该与flask密切相关
      【解决方案4】:

      确保使用正确的 Python Unicode 对象,例如使用 u"..." 文字创建的对象。换句话说,你的对象的类型应该是unicode 而不是str

      >>> type('ą')
      <type 'str'>
      >>> type(u'ą')
      <type 'unicode'>
      

      请注意,这仅适用于 Python 2,在 Python 3 中,默认情况下所有字符串文字都是 Unicode。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-03
        • 2021-10-03
        • 2018-12-30
        • 2015-07-05
        • 2018-01-03
        • 2020-05-04
        • 2022-01-09
        相关资源
        最近更新 更多