Python 如何使SQLAlchemy将对象存储为json而不是关系?
我有两节课Python 如何使SQLAlchemy将对象存储为json而不是关系?,python,sqlalchemy,Python,Sqlalchemy,我有两节课 class PersonName: Salutation: String FirstName : String LastName : String 及 我不想为PersonName生成一个表,而是希望SQLAlchemy简单地使用一个字符串列并将实例序列化为JSON(并在获取实例时反序列化)。我不需要深入的查询或任何东西,只需要基本的序列化 这可能吗?是一个很好的解决方案 如下定义类: 班级人员(数据库模型): __tablename_uuu='persons'
class PersonName:
Salutation: String
FirstName : String
LastName : String
及
我不想为PersonName
生成一个表,而是希望SQLAlchemy简单地使用一个字符串列并将实例序列化为JSON(并在获取实例时反序列化)。我不需要深入的查询或任何东西,只需要基本的序列化
这可能吗?是一个很好的解决方案
如下定义类:
班级人员(数据库模型):
__tablename_uuu='persons'
id=db.Column(db.Integer,主键=True)
fancy_name=db.Column(JsonEncodedDict)
然后像这样使用它:
person = Person(fancy_name={'Salutation': 'Mr.', 'FirstName': 'Sergey', 'FullMiddleName': 'Vladimirovich'})
要使其正常工作,您需要在某处定义一个自定义JSON类型装饰器
import json
from sqlalchemy.ext import mutable
db = SQLAlchemy()
class JsonEncodedDict(db.TypeDecorator):
"""Enables JSON storage by encoding and decoding on the fly."""
impl = db.Text
def process_bind_param(self, value, dialect):
if value is None:
return '{}'
else:
return json.dumps(value)
def process_result_value(self, value, dialect):
if value is None:
return {}
else:
return json.loads(value)
mutable.MutableDict.associate_with(JsonEncodedDict)
您使用的是什么数据库管理系统?有些本地支持JSON。不过,您当前的方法没有问题。请参阅@IljaEverilä在我的案例中,我使用的是sql server,正如我在问题中所说,我想序列化为字符串(比如说
NVarchar
列)。Sql server没有实际的json类型,但如果您将json存储在列中,它会为它提供查询扩展。不管怎样,这都不是我需要数据库支持的事情,我永远不会查询名字或称呼。这是我所需要的ORM支持,我认为这将对您有所帮助:
import json
from sqlalchemy.ext import mutable
db = SQLAlchemy()
class JsonEncodedDict(db.TypeDecorator):
"""Enables JSON storage by encoding and decoding on the fly."""
impl = db.Text
def process_bind_param(self, value, dialect):
if value is None:
return '{}'
else:
return json.dumps(value)
def process_result_value(self, value, dialect):
if value is None:
return {}
else:
return json.loads(value)
mutable.MutableDict.associate_with(JsonEncodedDict)