sqlalchemy 13 控制alembic
迁移之前,需先 确认哪些迁移已经应用到数据库了。查看应用到数据库的最后一次迁移ID 用 alembic 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相关推荐
- SqlAlchemy + Alembic Migrate
SqlAlchemy+sqlite3+Alembic 数据库迁移踩坑- NotImplementedError: No support for ALTER of constraints in SQLi ...
- [zz]使用 SQLAlchemy
个人总结: 这个文档前半部分没有什么特别的地方,但是最后的一个使用 SQLAlchemy 演示如何创建一个元数据工具.此工具的目标是监控文件系统.创建和删除事件,以及在一个 SQLAlchemy 数据 ...
- 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第5章-基于骨干网络的多智能体系统群集运动与避障控制
第4章 回到目录 第6章 第5章-基于骨干网络的多智能体系统群集运动与避障控制 5.1 研究背景 5.2 预备知识 5.2.1 问题描述 运动方程 (5.1) 5.2.2 流体力学基础 可压缩性 黏性 ...
- ios布局 分为左右两块_iOS 13 隐秘的细节④:系统组件·下
新出的IOS13系统应该让非常多的设计师非常头疼,对比之前的系统存在哪些改变,设计师应该如何调整?本文从IOS13系统的隐秘细节出发,讲解了该系统的不一样,更好的帮助设计师快速了解新系统的调整,从而更 ...
- alembic 使用
SQLalchemy 版本迁移工具 alembic 使用 安装用到的包 pip install pymysql pip install sqlalchemy pip install alembic a ...
- migrate之alembic无法生成表
第一次删除了migrate文件夹 执行upgrade 发现没有生成表,然后versions文件夹中都是空的. alembic init --template generic migrate # 使用g ...
- s7200液位控制程序_s7-200 温度PID控制
请参考此PDF文件,希望对你有帮助. 回答者: *天天* - 初级技术员  第5级 2011-03-01 10:05:13 控制蒸汽阀的开度的问题实际就是个控制温度的问 ...
- 电厂燃煤锅炉氨逃逸的分析与控制
火电厂NOx排放标准控制在了50mg/Nm3,随着控制指标的提高,带来了一系列的问题.自从2013年脱硝系统的投运以来,燃煤电厂SCR催化剂基本经历了增加备用层,更换运行层,SCR控制设备也经历了长达 ...
- 17 Flask mega-tutorial 第17章 在Linux上部署(腾讯云 Ubuntu)【极其详细的部署过程】
如需转载请注明出处. win10 64位.Python 3.6.3.Notepad++.Chrome 67.0.3396.99(正式版本)(64 位) 注:作者编写时间2018-03-28,linux ...
最新文章
- 哪里可以学python编程-Python编程适合哪些人学?老男孩Python教程
- 洛谷 P2893 [USACO08FEB]修路Making the Grade 解题报告
- 设置VS2010中使用IntelliTrace来进行调试
- 使用nginx代理,怎么获取真实的IP
- 初学者学习C++的50条忠告
- [转载] 老版本ubuntu 更新源
- 开发缺点_利用模板去建设开发企业网站好不好?模板建站的缺点?
- CSS常用选择器简析(带简单案例)
- 北大中文核心期刊目录(2004年版)全文
- [Git]删除git文件历史记录
- 使用Apache poi生成excel并绘制折线统计图,扇形统计图
- CPU维护及故障处理
- RichTalk 快报 第 5 期
- linux网卡汇聚模式,Linux网卡聚合 linux多网卡绑定聚合之bond模式原理
- 三十一、神仙版《球为媒》
- 计算机教学研讨会方案,【教学教研】新学年我校计算机专业组积极开展教学研讨会议...
- 简单对比H3C/Huawei 802.1x+Radius/AAA配置差异
- 统计学中的「标准差和方差」
- 用Echarts绘制饼状图
- 【项目精选】基于Spring Boot的综合性B2C电商平台--迷你天猫商城
热门文章
- android 模拟器 vscode,解决夜神模拟器启动后 VSCode仍然No Device问题(示例代码)
- Translation Lookaside Buffer (TLB)
- 随堂练供应链物流——综合生产计划
- Win10 蓝牙鼠标,删除失败
- 【美少女】腾讯CSIG三面
- 【反内卷】开创全新AI多模态任务一视听分割:附原理、代码实践、优化教程(一)
- Android怎么弄大头特效,抖音大头特效怎么弄
- Python Web开发 之 学生管理系统(2)[实现筛选,搜索,分页]
- vmos框架_虚拟大师(com.vmos.app)
- 以跨链技术引领区块链3.0时代,aelf主网正式上线!