SQLAlchemy可以处理未知的多态身份吗?

时间:2016-01-27 20:45:10

标签: python sqlalchemy

我有两部分应用:摄取和显示。理想情况下,这两个版本总是处于相同版本的代码中,但实际上,现实并不能实现完美的同步部署。此外,在推出相应的前端之前,我们在处理数据摄取方面很有用。

我遇到的问题是我使用SQLAlchemy的多态身份,当我在后端添加一个新类时,前端突然不知道如何处理它。这是一个具体的例子。说我有这段代码:

class Campaign(BaseData):
    __tablename__ = 'campaign'
    __mapper_args__ = {
        'polymorphic_identity': 'parent',
        'polymorphic_on': description
    }

class SubCampaign(Campaign):
    __mapper_args__ = {
        'polymorphic_identity': 'sub'
    }

然后,我添加了这个新类:

class OtherCampaign(Campaign):
    __mapper_args__ = {
        'polymorphic_identity': 'other'
    }

当我将一些行插入数据库并将description列设置为other时,会抛出错误:

No such polymorphic_identity 'other' is defined

有办法解决这个问题吗?我很乐意忽略这些行。

1 个答案:

答案 0 :(得分:0)

根据在评论中与zzzeek的讨论,我最终在读取端更改查询以仅请求有效数据。而不是:

rows =  session.query(Campaign).all()

我在做

valid_descriptions = [m.polymorphic_identity for m in 
                      Campaign.__mapper__.polymorphic_iterator()]
rows =  session.query(Campaign)\
                .filter(Campaign.description.in_(valid_descriptions))\
                .all()