sqlalchemy JSON 字段写入时中文序列化问题

JSON字段定义

python 复制代码
from sqlalchemy import Column, JSON

class Table(Base):
    __tablename__ = "table"
    __table_args__ = ({"comment": "表名称"})

    ...
    extra = Column(JSON, comment="其他属性")
    ...

局部序列化

python 复制代码
def create(extra):
    table= Table()
    # 直接存储,sqlalchemy会调用json.dumps序列化后存储,中文会被编码,修改ensure_ascii=False中文显示正常
    # table.extra = extra
    table.extra = json.dumps(extra, ensure_ascii=False)

全局序列化

python 复制代码
# app.config 中设置SQLALCHEMY_ENGINE_OPTIONS 
SQLALCHEMY_ENGINE_OPTIONS = {
    # 全局写入json时的序列化操作
    "json_serializer": lambda obj: json.dumps(obj, ensure_ascii=False)
}

设置json_serializer后,可以使用table.extra = extra保存json数据。

最终json_serializer会被传递至create_engine中去,官网文档中搜索json_serializer

相关推荐
颂love5 天前
健康打卡系统项目总结
fastapi·sqlalchemy·全栈开发·dify集成
阿kun要赚马内9 天前
后端数据操作组合:Pydantic与ORM
后端·python·orm·sqlalchemy
海市公约11 天前
FastAPI异步ORM增删改实战:从单表操作到一对多关联查询
fastapi·sqlalchemy·pydantic模型·orm增删改·一对多关联·外键与连表·异步session
曲幽1 个月前
FastAPI + SQLAlchemy 2.0 通用CRUD操作手册 —— 从同步到异步,一次讲透
python·fastapi·web·async·sqlalchemy·session·crud·sync·with
曲幽1 个月前
FastAPI 生产环境避坑指南:用 Alembic 管理数据库迁移,别再手动改表结构了!
python·fastapi·web·async·sqlalchemy·env·alembic·migration
曲幽1 个月前
FastAPI服务半夜又挂了?先别急着重启,查查你的数据库连接池“池子”是不是漏了
python·prometheus·fastapi·web·async·sqlalchemy·connection·pool
曲幽1 个月前
FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了
python·fastapi·web·orm·async·sqlalchemy·sqlmodel·tortoise
半点闲1 个月前
入门 SQLAlchemy 教程:从 0 到 1 创建数据库
数据库·python·sqlite·sqlalchemy
曲幽2 个月前
FastAPI里玩转Redis和数据库的正确姿势,别让异步任务把你坑哭了!
redis·python·mysql·fastapi·web·celery·sqlalchemy·task·backgroundtask