惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
Recent Announcements
Recent Announcements
IT之家
IT之家
人人都是产品经理
人人都是产品经理
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
大猫的无限游戏
大猫的无限游戏
U
Unit 42
罗磊的独立博客
博客园 - Franky
WordPress大学
WordPress大学
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
SecWiki News
SecWiki News
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
P
Palo Alto Networks Blog
F
Fortinet All Blogs
P
Proofpoint News Feed
博客园 - 叶小钗
C
CERT Recently Published Vulnerability Notes
T
Tor Project blog
Spread Privacy
Spread Privacy
S
Securelist
C
Cisco Blogs
I
Intezer
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Cyberwarzone
Cyberwarzone
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy & Cybersecurity Law Blog
宝玉的分享
宝玉的分享
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Engineering at Meta
Engineering at Meta
S
Schneier on Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
GbyAI
GbyAI
T
Troy Hunt's Blog
T
Threatpost
博客园 - 司徒正美
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog
AWS News Blog
AWS News Blog
T
The Blog of Author Tim Ferriss
G
GRAHAM CLULEY
N
Netflix TechBlog - Medium
酷 壳 – CoolShell
酷 壳 – CoolShell
Google DeepMind News
Google DeepMind News
Know Your Adversary
Know Your Adversary
S
SegmentFault 最新的问题

博客园 - 拿走不谢

20190131 经验总结:如何从rst文件编译出自己的sqlalchemy的文档 20180821 Python学习笔记:如何获取当前程序路径 网络编程之 keepalive(zz) java socket编程中backlog的含义(zz) 20170814 新鲜:EChart新增了日历图,要想办法用起来 Canvas 和 SVG 的不同 androidstudio全局搜索快捷键Ctrl+Shift+F失效的解决办法 Android support 26.0.0-alpha1 产生的问题(zz) 20170711 通过阿里云与国家气象局合作的api读取历史辐照数据 Android、iOS、和Web如何做灰度发布? 周鸿祎《智能主义》读书笔记 《Python数据分析与挖掘实战》读书笔记 《腾讯传》读书笔记 《如何高效学习》读书笔记 版本控制:tortoise svn的 revert to this revision和 revert changes from this revision有什么区别? android:第十章,后台的默默劳动者——服务,学习笔记 Android: Android Studio签名打包的两种方式(zz) Android:如何生成自己的keystore(zz) android:Android中用文件初始化sqlite数据库(zz)
Python学习笔记:Flask-Migrate基于model做upgrade的基本原理
拿走不谢 · 2018-08-29 · via 博客园 - 拿走不谢

2)获取帮助,在pycharm的控制台中输入 flask db  --help,或者flask db migrate  --help,这样就可以了解各个命令的信息了

3)一般用法,

    >flask db init

    >flask db migrate

    >flask db upgrade

    后续对脚本有任何的修改,只要重复执行后两句就可以了。

4)测试1:添加一行数据,删除email列,然后再加上

    针对下面这个表:

    a)先通过以上3个命令创建表;

    b)然后再数据库中插入一条数据;

    c)然后从models中把email列删除,执行migrate ,updrade,此时发现,数据还在,只是列删除了;

    d)然后恢复email列,执行migrate,upgrade,此时发现,数据还在,增加了一个email的空列;

    仔细观察日志,发现这个upgrade执行的是升级,而不是重新创建

其中04a26df9c6d3_.py的内容为:

04f13e3c2f7e_.py 的内容为

5)测试2:把user表删除

    a)如果只执行flask db upgrade,则什么都不执行

    b)执行flask db migrate,然后再执行flask db upgrade,则可以重新创建表

    通过migrate,程序会先比较本地的model和数据库中实际的表,然后创建如下脚本 69f5e753ee6c_.py

6)结论

    对模型的任何修改,都要再执行flask db migrate, flask db upgrade

    这里做的任何的更新,实际上都是把模型和数据库当前的状态做比较的

    而且历次的版本都有,所以实际上可以回退到之前的任何一个版本。

    这个思路其实挺好,这就是我们之前写数据库补丁脚本的思路,一环套一环,只不过之前是靠人的,现在是靠程序自动生成的。

    而且他这里更好的地方是,不但支持upgrade,还支持downgrade