我有两个课
class PersonName:
Salutation: String
FirstName : String
LastName : String
和
class Person:
id : Integer
Name : PersonName
...other props...
我不希望为PersonName
生成表,我希望SQLAlchemy简单地使用字符串列并将实例序列化为JSON(并在提取实例时反序列化)。我不需要深度查询或其他任何东西,只需要基本的序列化即可。
这可能吗?
答案 0 :(得分:0)
Here是一个不错的解决方案。
像这样定义类:
class Person(db.Model):
__tablename__ = 'persons'
id = db.Column(db.Integer, primary_key=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)