由于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'
}