python - 不同类型的 SQLAlchemy 列同义词

标签 python sqlalchemy

我正在使用 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/

相关文章:

Python + comet + web(聊天)-我需要工作(!)库/服务器

python - 在 Python 中从 csv 阅读器复制列表

python - 实例变量的更改未在引用同一变量的元组中更新

python - 如何使用 SQLAlchemy 关闭并重新连接以避免事务中空闲超时

python - 如何在 SQLAlchemy ORM 中选择带有 "as"的查询并连接表

python - 无法导入名称 View

python - 我想向 pandas 数据框添加新索引

python - Unicode 与 Alembic 不一致

python - 使用 SQLAlchemy 元数据获取现有表

sqlalchemy - 为什么我在简单的地质炼金查询中收到 AttributeError InstanceState has no_post_inspect ?