Flask学习笔记(3)-数据库迁移

数据库迁移

通过创建虚拟flask环境来迁移数据库。

一、创建虚拟环境

virtualenvwrapper库中有个mkvirtualenv函数,用来创建虚拟环境(make virtual envirement)。使用命令

mkvirtualenv flask-tutorial --python=python3.6

创建一个名为flask-tutorial的虚拟环境,如图
Flask学习笔记(3)-数据库迁移
可利用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学习笔记(3)-数据库迁移
接着执行命令行flask db stamp head为comments数据库添加“版本号”。
去数据库console执行:

show tables;
select * from alembic_version;

结果如图:
Flask学习笔记(3)-数据库迁移
发现此时发生变化的还有原本的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文件。如图:
Flask学习笔记(3)-数据库迁移
注意到新文件里增加了upgrade()函数用来增加posted列。
2.flask db upgrade执行上述文件,对数据库进行添加列。

这时候查看MySQL,发现posted已经被添加了。
Flask学习笔记(3)-数据库迁移

上一篇:pandas DataFrame学习(1)


下一篇:Flask学习笔记(2)-login_page