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

Ryz*_*Kot 6 python mysql unicode sqlalchemy

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

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

以下是从我的Web浏览器发送到服务器的数据示例.数据可以是拉丁字符和非拉丁字符的混合.我注意到非拉丁字符是编纂的,但拉丁字母不是.

身体:"d¥Ð¾Ñ‡ÑƒNN ...оÐ'иÑ,ьна#N"DD»ÑŒÐ¼DSD°N€Ñ,ÐμлNOEÐÐμÑмоÑ,Ñ€ÑнапоÑÑ€ÐμÐ'. ÑÑ,вÐμннÑ<ÐμоÑ,зN <вÑ<,N"DD»ÑŒÐ¼Ð'олÐÐμнd±Ñ<Ñ,ьприкольнÑ<м.Ð'Ð¾Ñ ,ÐμгоопиÑаниÐμ 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))
Run Code Online (Sandbox Code Playgroud)

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

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()
Run Code Online (Sandbox Code Playgroud)

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

doo*_*des 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()
Run Code Online (Sandbox Code Playgroud)