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