怪异的Alembic行为

2024-04-26 14:22:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个迁移脚本。在

脚本一:基地

from models import EntityProperty
from contextlib import contextmanager

# revision identifiers, used by Alembic.
revision = 'ecbde8fa83e3'
down_revision = None
branch_labels = None
depends_on = None

from alembic import op       # noqa
import sqlalchemy as sa      # noqa


@contextmanager
def session_scope():
   session = sa.orm.session.Session(bind=op.get_bind())
   try:
       yield session
       session.commit()
   except:
        session.rollback()
        raise
   finally:
        session.close()


def _upgrade(session):
   properties = session.query(EntityProperty).filter(
      ~EntityProperty._ptype.in_(["AI", "AO", "AV"])
   ).all()

   for _property in properties:
      _property._cov_increment = None


def upgrade():
   with session_scope() as session:
    _upgrade(session)


def downgrade():
    pass

脚本2:

^{pr2}$

现在当我试图降级到基地时,我得到一个错误说明

no such column: entityproperties.bacnet_object

此错误是在执行基本脚本(脚本1)时生成的。我检查了生成的SQL,它有

entityproperties.bacnet_object AS entityproperties_bacnet_object

为什么在执行script1时请求bacnet_object列?Script2的降级应该从EntityProperty表中删除该列。我做错什么了?在

更新:我确实在第二个脚本执行后检查了数据库。在EntityProperty表中没有名为bacnet_object的列,但是生成的SQL仍然在寻找bacnet_object列?在


Tags: fromimport脚本noneobjectsessiondefrevision