Sqlalchemy 设计迁移脚本以使用Alembic事务
我一直在编写一个Alembic升级脚本,用于我的SQLAlchemy/SQLite数据库。该脚本的目的是将一列从十进制值更改为整数值。在这个过程中,我学习了Sqlalchemy 设计迁移脚本以使用Alembic事务,sqlalchemy,alembic,Sqlalchemy,Alembic,我一直在编写一个Alembic升级脚本,用于我的SQLAlchemy/SQLite数据库。该脚本的目的是将一列从十进制值更改为整数值。在这个过程中,我学习了DROP COLUMN。但更糟糕的是,在处理这个问题时,Alembic让我的表处于中间状态,我正在编辑的表既有decimal列,也有integer列 但这个问题不是关于如何删除列。我知道我现在想怎么做。这个问题是关于如何将Alembic升级/降级脚本的所有DDL语句以及DLM内容打包到一个事务中,如果遇到故障,可以回滚该事务。我希望有一个安全
DROP COLUMN
。但更糟糕的是,在处理这个问题时,Alembic让我的表处于中间状态,我正在编辑的表既有decimal列,也有integer列
但这个问题不是关于如何删除列。我知道我现在想怎么做。这个问题是关于如何将Alembic升级/降级脚本的所有DDL语句以及DLM内容打包到一个事务中,如果遇到故障,可以回滚该事务。我希望有一个安全的模式可以推广到我所有的Alembic迁移
下面是我要查找的伪代码:
def upgrade():
# get context or connection or something
# on context/connection/migration context/something do something like
with context.begin_transaction():
# do various DDL stuff
# with various new DDL stuff, do bulk inserts and data manipulation
# once finally done, commit and end the transaction. roll EVERYTHING back if it fails.
我现在很困惑的是如何确定连接到数据库的正确方式。我是否执行类似于
alembic.op.get_bind()
的操作并处理那里的连接?我是否使用了MigrationContext
?您使用的是什么版本的Python@我用的是Alembic 0.9.8那是。。。不是我问的。如果运行python-V
它会输出什么?(2.7.10?3.5.3?3.6.2?等)我不识字。在我使用的虚拟环境(pipenv)中运行该命令返回:python3.6.4