迁移之前,需先 确认哪些迁移已经应用到数据库了。查看应用到数据库的最后一次迁移IDalembic current

(venv) D:\alchemy\c11>alembic current
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
0bad48b33ec2 (head)        #指出当前的迁移

alembic history 显示 历史迁移记录。

(venv) D:\alchemy\c11>alembic history
9f5bb26a626e -> 0bad48b33ec2 (head), rename cookies
87eea99e5889 -> 9f5bb26a626e, add cookie model
<base> -> 87eea99e5889, emptyinit

迁移降级(撤销)。downgrade + ID

(venv) D:\alchemy\c11>alembic downgrade 9f5bb26a626e
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running downgrade 0bad48b33ec2 -> 9f5bb26a626e, rename cookies

降级以后,发现 数据库里表的名称恢复了。

(venv) D:\alchemy\c11>sqlite3 alembictest.db
SQLite version 3.35.5 2021-04-19 18:32:05
Enter ".help" for usage hints.
sqlite> .tables
alembic_version  cookies

查看数据库所处的迁移级别(ID):

(venv) D:\alchemy\c11>alembic current
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
9f5bb26a626e        #但这次的没有head了

现在数据库回到了指定的迁移。但如果想让app恢复到工作状态,还要把db.py里的 表名 从new_cookies改回来cookie,以便使用。

(venv) D:\alchemy\c11>alembic history
9f5bb26a626e -> 0bad48b33ec2 (head), rename cookies
87eea99e5889 -> 9f5bb26a626e, add cookie model
<base> -> 87eea99e5889, emptyinit(venv) D:\alchemy\c11>alembic current
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
9f5bb26a626e

调用history和current发现,head不在目前的迁移(或者说我们不在最新的迁移里)。如果不处理,下次使用alembic upgrade head时会,new_cookies迁移就会运行,导致 报错。最简单的处理办法是:把不要的迁移的直接在alembic/versions/ 目录里删掉。


标记数据库迁移级别stamp

当要执行 跳过迁移 或 恢复数据库 等操作时,数据库可能会认为 迁移 和 实际情况不同。为了解决这个问题,我们用stamp 强行 把数据库标记成 某个级别的迁移,但实际上 并没有运行这个迁移。它只是更新了 alembic表,以反映我们在命令中强制 标记的迁移级别(ID)。也就是实际上 跳过了这个迁移。

像现在我们在9f5bb26a626e,数据库里的表 名称也恢复成 cookies了,但我就想把迁移标记成new_cookies时的0bad48b33ec2

(venv) D:\alchemy\c11>alembic stamp 0bad48b33ec2
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running stamp_revision 9f5bb26a626e -> 0bad48b33ec2

执行current发现 现在的迁移级别就是0bad48b33ec2,但数据库里 表 名称还是9f5bb26a626e的cookies

(venv) D:\alchemy\c11>alembic current
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
0bad48b33ec2 (head)(venv) D:\alchemy\c11>sqlite3 alembictest.db
SQLite version 3.35.5 2021-04-19 18:32:05
Enter ".help" for usage hints.
sqlite> .tables
alembic_version  cookies
sqlite>  

也就是没有运行0bad48b33ec2。跳过了0bad48b33ec2。

像这样用stamp,只适用于当前的数据库。如果改了alchemy.ini的sqlalchemy.url,Alembic迁移环境 指向了另一个数据库,而新数据库又 低于跳过的迁移的级别 或者为 。那可以用alembic upgrade head真正运行这个迁移。


这时候如果还想降级回9f5bb26a626e,会因为数据库里没有new_cookies表而报错。

(venv) D:\alchemy\c11>alembic downgrade 9f5bb26a626e
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running downgrade 0bad48b33ec2 -> 9f5bb26a626e, rename cookies
Traceback (most recent call last):
...
cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: new_cookies
[SQL: ALTER TABLE new_cookies RENAME TO cookies]

可以stamp回去

(venv) D:\alchemy\c11>alembic stamp 9f5bb26a626e
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running stamp_revision 0bad48b33ec2 -> 9f5bb26a626e(venv) D:\alchemy\c11>alembic current
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
9f5bb26a626e

处理掉0bad48b33ec2。在version里直接把迁移文件删除。再次用current查看状态,head在目前的迁移,9f5bb26a626e是最新的迁移。

(venv) D:\alchemy\c11>alembic current
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
9f5bb26a626e (head)

sqlalchemy 13 控制alembic相关推荐

  1. SqlAlchemy + Alembic Migrate

    SqlAlchemy+sqlite3+Alembic 数据库迁移踩坑- NotImplementedError: No support for ALTER of constraints in SQLi ...

  2. [zz]使用 SQLAlchemy

    个人总结: 这个文档前半部分没有什么特别的地方,但是最后的一个使用 SQLAlchemy 演示如何创建一个元数据工具.此工具的目标是监控文件系统.创建和删除事件,以及在一个 SQLAlchemy 数据 ...

  3. 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第5章-基于骨干网络的多智能体系统群集运动与避障控制

    第4章 回到目录 第6章 第5章-基于骨干网络的多智能体系统群集运动与避障控制 5.1 研究背景 5.2 预备知识 5.2.1 问题描述 运动方程 (5.1) 5.2.2 流体力学基础 可压缩性 黏性 ...

  4. ios布局 分为左右两块_iOS 13 隐秘的细节④:系统组件·下

    新出的IOS13系统应该让非常多的设计师非常头疼,对比之前的系统存在哪些改变,设计师应该如何调整?本文从IOS13系统的隐秘细节出发,讲解了该系统的不一样,更好的帮助设计师快速了解新系统的调整,从而更 ...

  5. alembic 使用

    SQLalchemy 版本迁移工具 alembic 使用 安装用到的包 pip install pymysql pip install sqlalchemy pip install alembic a ...

  6. migrate之alembic无法生成表

    第一次删除了migrate文件夹 执行upgrade 发现没有生成表,然后versions文件夹中都是空的. alembic init --template generic migrate # 使用g ...

  7. s7200液位控制程序_s7-200 温度PID控制

    请参考此PDF文件,希望对你有帮助. 回答者: *天天* - 初级技术员&nbsp&nbsp第5级 2011-03-01 10:05:13 控制蒸汽阀的开度的问题实际就是个控制温度的问 ...

  8. 电厂燃煤锅炉氨逃逸的分析与控制

    火电厂NOx排放标准控制在了50mg/Nm3,随着控制指标的提高,带来了一系列的问题.自从2013年脱硝系统的投运以来,燃煤电厂SCR催化剂基本经历了增加备用层,更换运行层,SCR控制设备也经历了长达 ...

  9. 17 Flask mega-tutorial 第17章 在Linux上部署(腾讯云 Ubuntu)【极其详细的部署过程】

    如需转载请注明出处. win10 64位.Python 3.6.3.Notepad++.Chrome 67.0.3396.99(正式版本)(64 位) 注:作者编写时间2018-03-28,linux ...

最新文章

  1. 哪里可以学python编程-Python编程适合哪些人学?老男孩Python教程
  2. 洛谷 P2893 [USACO08FEB]修路Making the Grade 解题报告
  3. 设置VS2010中使用IntelliTrace来进行调试
  4. 使用nginx代理,怎么获取真实的IP
  5. 初学者学习C++的50条忠告
  6. [转载] 老版本ubuntu 更新源
  7. 开发缺点_利用模板去建设开发企业网站好不好?模板建站的缺点?
  8. CSS常用选择器简析(带简单案例)
  9. 北大中文核心期刊目录(2004年版)全文
  10. [Git]删除git文件历史记录
  11. 使用Apache poi生成excel并绘制折线统计图,扇形统计图
  12. CPU维护及故障处理
  13. RichTalk 快报 第 5 期
  14. linux网卡汇聚模式,Linux网卡聚合 linux多网卡绑定聚合之bond模式原理
  15. 三十一、神仙版《球为媒》
  16. 计算机教学研讨会方案,【教学教研】新学年我校计算机专业组积极开展教学研讨会议...
  17. 简单对比H3C/Huawei 802.1x+Radius/AAA配置差异
  18. 统计学中的「标准差和方差」
  19. 用Echarts绘制饼状图
  20. 【项目精选】基于Spring Boot的综合性B2C电商平台--迷你天猫商城

热门文章

  1. android 模拟器 vscode,解决夜神模拟器启动后 VSCode仍然No Device问题(示例代码)
  2. Translation Lookaside Buffer (TLB)
  3. 随堂练供应链物流——综合生产计划
  4. Win10 蓝牙鼠标,删除失败
  5. 【美少女】腾讯CSIG三面
  6. 【反内卷】开创全新AI多模态任务一视听分割:附原理、代码实践、优化教程(一)
  7. Android怎么弄大头特效,抖音大头特效怎么弄
  8. Python Web开发 之 学生管理系统(2)[实现筛选,搜索,分页]
  9. vmos框架_虚拟大师(com.vmos.app)
  10. 以跨链技术引领区块链3.0时代,aelf主网正式上线!