Как сохранить json тип с flask -sqlalchemy? - PullRequest
1 голос
/ 06 марта 2020

Я сейчас занимаюсь разработкой приложения, используя Flask + Vue. Я использую flask -sqlalchemy для ORM.

При сохранении json в JSON тип MySQL произошло явление, при котором зарегистрированные данные становятся символьной строкой. Можно ли сохранить в состоянии 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")

Выбор результата регистрации * из user_info;

"{\ "item1 \": false} "

Я хочу сохранить в следующем состоянии.

{" item1 ": false}

Я японец. Извините за плохой английский sh ....

1 Ответ

0 голосов
/ 09 марта 2020

json .dumps означает json в строку

Здесь вы можете json в строку:

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

не нужно. база данных примет json. Возможно, я им пользуюсь. Может быть, вам нужны json .loads?

...