当时的场景大概如下,就是一个简单的查询,然后查看model实例的to_dict()结果
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy_serializer import SerializerMixin
from datetime import datetime
import setting
app = Flask(__name__)
app.config.from_object(setting)
db = SQLAlchemy(app)
class Blog(db.Model, SerializerMixin):
__tablename__ = "tb_blog"
serialize_rules = []
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
shop_id = db.Column(db.Integer, nullable=False)
user_id = db.Column(db.Integer, nullable=False)
name = db.Column(db.String(50), nullable=False, name='title')
images = db.Column(db.String(200), nullable=True)
content = db.Column(db.Text, nullable=True)
liked = db.Column(db.Integer, default=1)
comments = db.Column(db.Integer, default=0)
createTime = db.Column(db.DateTime, default=datetime.now, name="create_time")
updateTime = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now, name="update_time")
@app.route('/')
def hello_world(): # put application's code here
blog = Blog.query.get(4)
print(blog.to_dict())
return 'Hello World!'
if __name__ == '__main__':
app.run()
就这样一个简单的业务逻辑,万万想不到竟然也会出错 UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\U0001f352’ in position 152: illegal multibyte sequence
这段错误说的是gbk编码器不能编码’\U0001f352’这段unicode字符,这是因为python控制台输出默认用的是window的命令行窗口,格式为gbk,而表情包不能用gbk编码
其中我的mysql使用的是utf8mb4_general_ci编码,然后其中Blog.title就有几条数据大概是像 红酒杯🍷战斧牛排🥩 这种带有表情包的
解决方法是
-
不要直接点击pycharm的运行,因为这样就是默认使用window的命令行输出,而是通过在pycharm的终端(默认为PowerShell,是utf-8编码)运行启动文件
-
或者不输出任何东西,这样也不会报错。
这里其实我有一个疑问,就是如果我在另一个文件中单独引用上下文这样输出就不会出问题,遇到大佬希望能给解答,多谢!!!
from app import app
from model import Blog
with app.app_context():
blog = Blog.query.get(4)
print(blog.to_dict())