我正在使用SQLAlchemy配方here对我的模型中的DB进行神奇的JSON编码/解码,如:
class Thing(Base):
__tablename__ = 'things'
id = Column(Integer(), primary_key=True)
data = Column(JSONEncodedDict)
当我想在我的模型中创建一个额外的“raw_data”字段来访问相同的底层JSON数据时,我遇到了麻烦,但没有编码/解码它:
raw_data = Column("data", VARCHAR)
SQLAlchemy似乎对名称冲突感到困惑,并将一列未映射。有什么方法可以说服SQLAlchemy将两个属性实际映射到同一列?
答案 0 :(得分:3)
我只想通过SQLAlchemy定义raw_data
列,然后使用Python的property / setter来透明地使用data
。即:
class Thing(Base):
__tablename__ = 'things'
id = Column(Integer(), primary_key=True)
raw_data = Column(String())
@property
def data(self):
# add some checking here too
return json.loads(self.raw_data)
@data.setter
def data(self, value):
# dito
self.raw_data = json.dumps(value)