如何使用 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?
我目前正在使用 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?