SQLAlchemy列具有不同类型的同义词

时间:2012-02-03 09:27:30

标签: python sqlalchemy

我正在使用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将两个属性实际映射到同一列?

1 个答案:

答案 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)