如何使用 flask-sqlalchemy 保存 json 类型?

How to save json type with flask-sqlalchemy?

我目前正在使用 Flask + Vue 开发应用程序。 我对 ORM 使用 flask-sqlalchemy。

将 json 保存到 JSON 时,输入 MySQL,该操作将数据注册为字符串而不是 JSON 对象。

是否可以保存JSON中的值?

示例代码:

from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow

db = SQLAlchemy()
marsh = Marshmallow()
from database import db, marsh
from sqlalchemy.dialects.mysql import insert

class UserInfo(db.Model):
    __tablename__ = 'user_info'

    user_id = db.Column(db.String, nullable=False, primary_key=True)
    json= db.Column(db.JSON, nullable=True)

    def insert_on_duplicate_key_update(user_id, str_json):
        json = json.dumps(str_json, ensure_ascii=False)
        insert_stmt = insert(UserInfo).values({UserInfo.user_id: user_id
                                               UserInfo.json : json })

        print(json)
        // print {"item1": false} 

        on_conflict_stmt = insert_stmt.on_duplicate_key_update(
            json=insert_stmt.inserted.json)

        db.engine.execute(on_conflict_stmt)

        return insert_stmt

class UserInfoSchema(marsh.ModelSchema):
    class Meta:
        model = UserInfo
        fields = ("user_id", "json")

报名结果:

select * from user_info;

{\"item1\": false}

我要保存为以下状态

{"item1": false}

我是日本人。抱歉英语不好....

json.dumps就是把json变成字符串

在这里你把json变成字符串:

json = json.dumps(str_json, ensure_ascii=False)

不需要。数据库将接受 json。可能,我用它。也许你需要 json.loads?