通过创建虚拟flask环境来迁移数据库。
<code>virtualenvwrapper</code>库中有个<code>mkvirtualenv</code>函数,用来创建虚拟环境(make virtual envirement)。使用命令
创建一个名为<code>flask-tutorial</code>的虚拟环境,如图
可利用<code>workon flask-tutorial</code>命令激活这个虚拟环境。使用<code>deactivate</code>退出这个虚拟环境。在默认条件下,虚拟环境不包含任何库。因此需要重新安装。
接着通过<code>pip freeze</code>查看库,将会看到:
使用<code>pip freeze > requirements.txt</code>来生成requirements.txt这个文件。注意删除第一行的<code>-f /usr/share/pip-wheels</code>再git。
使用<code>pip install Flask-Migrate</code>安装这个扩展。
在flask_app.py添加以上代码启用Migrate。
命令:
然后创建一个新的数据库,替换掉flask_app.py里面的旧数据库。保存但不要运行。命令行输入<code>flask db migrate</code>之后,再将刚刚的改动改回去。<code>flask db migrate</code>会生成了一个.py的文件,这个文件是用来修改comments数据库的。如图
接着执行命令行<code>flask db stamp head</code>为comments数据库添加“版本号”。
去数据库console执行:
结果如图:
发现此时发生变化的还有原本的comments数据库:增加了<code>alembic_version</code>,这是Flask-Migrate用来完成工作的底层库。其中version_num列只有一行十六进制数字,这和执行
<code>flask db stamp head</code>得到的数字是一样的,可以理解为Flask_Migrate为comments数据库添加的“版本号”。
前面的工作做好了,下面就可以在flask_app.py 的comments class里添加<code>posted = db.Column(db.DateTime, default=datetime.now)</code>。接着依次输入以下命令行:
1.<code>flask db migrate</code>生成了更新数据库所需的Python文件。如图:
注意到新文件里增加了<code>upgrade()</code>函数用来增加posted列。
2.<code>flask db upgrade</code>执行上述文件,对数据库进行添加列。
这时候查看MySQL,发现posted已经被添加了。