SQLAlchemy在同一个表中继承类的问题

时间:2017-04-25 15:29:11

标签: python python-3.x sqlalchemy

由于alembic版本0.9,我在两个系统上遇到了一些严重的问题。两者都安装了Python 3.4.3和Alembic 0.9.1(通过pip)。我还更新了所有其他python包。唯一的区别是on是Windows系统而另一个是Linux(Ubuntu)。

在系统A上,SQLAlchemy突然开始抛出错误Table 'mytable' is already defined for this MetaData instance. Specify 'extend_existing=True' to redefine options and columns on an existing Table object.

奇怪的是,这个模型在几个月内保持不变。 但是如果SQLAlchemy需要extend_existing=True条目 - 为什么不呢。

在我的模型中添加extend_existing=True条目后,如本问题末尾所示,系统A上的一切正常。 然而现在SQLAlchemy抱怨系统B(之前没有问题)。 现在是系统B上的错误 Can't place __table_args__ on an inherited class with no table.

现在我陷入了一种奇怪的情况,如果我添加'extend_existing = True'它会在系统A上运行但在系统B上失败,如果我省略了这个设置,它就是另一种方式!

SQLAlchemy有什么问题以及如何获得适用于所有系统的版本?

我的模型中定义了以下类(只是一个非常大的模型文件的一小段摘录)。

class Base(db.Model):
   __tablename__ = 'mytable'
    polymorphic_type = db.Column(db.String(20))
    __mapper_args__ = {
        'polymorphic_on': polymorphic_type,
        'with_polymorphic': '*',
    }

class InheritedOne(Base):
    # the following line was added to make it work on system A
    __table_args__ = {'extend_existing': True}
    __mapper_args__ = {
        'polymorphic_identity': 'inheritedOne'
    }

class InheritedOneTwo(Base):
    # the following line was added to make it work on system A
    __table_args__ = {'extend_existing': True}
    __mapper_args__ = {
        'polymorphic_identity': 'inheritedTwo'
    }

0 个答案:

没有答案