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字符写入数据库?
您可以简单地将正文强制为 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)