Python与MySql“SAWarning:Unicode类型接收到非unicode绑定参数值”错误

时间:2013-11-20 09:20:15

标签: python mysql unicode sqlalchemy

在问这个问题之前,我已经检查了类似的其他帖子。提供的答案只是简单地压制了警告,而不是提出补救措施。

我有一个用Python + Flask编写的Web应用程序,它处理以unicode格式用jquery发送的异步请求。 Content-Type:application/json; charset=UTF-8

以下是从我的Web浏览器发送到服务器的数据示例。数据可以是拉丁字符和非拉丁字符的混合。我注意到非拉丁字符被编成法典但拉丁字符不是。

  

身体:“ХочÑÑÑ...оÐ'иÑ,ÑÐÐÐÐ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   ÐÐμÑмоÑ,ÑÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐ~~~~~~~   Ñ“ильмÐ'олжÐμнбÑ<Ñ,ьприкольнÑ<м。 Ð'оÑ,Ðμго   Ð¾Ð¿Ð¸ÑаниÐμ   http://www.allocine.fr/film/fichefilm_gen_cfilm=202971.html

以下是MySqlAlchemy类的定义

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.Unicode(1024))

现在,当我尝试将数据提交到数据库时,我收到以下错误:

  

SAWarning:Unicode类型接收到非unicode绑定参数值   param.append(processorskey)

在我使用Flask-Restful组件处理HTTP请求之间:

class PostListApi(Resource):
    decorators = [login_required]
    def post(self):
        body=request.json['body']
        post = Post(body=body)
        db.session.add(post)
        db.session.commit()

问题是我应该如何在服务器端正确处理数据,以确保不会将非unicode字符写入数据库?

1 个答案:

答案 0 :(得分:3)

您可以简单地强制身体进行unicode。

class PostListApi(Resource):
    decorators = [login_required]
    def post(self):
        body=request.json['body']
        post = Post(body=unicode(body))
        db.session.add(post)
        db.session.commit()