我正在使用 SQLAlchemy 配方 here在我的模型中神奇地 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 将两个属性实际映射到同一列?
最佳答案
我只是通过 SQLAlchemy 定义 raw_data
列,然后使用 Python 的属性/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)
关于python - 不同类型的 SQLAlchemy 列同义词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9126367/