背景
在很多时候,在我们设计好模型之后,又需要进行一定的改变和更新数据操作;,最直接的方式就是删除原来的旧表,但是随之而来的问题就是我们之前的数据也会删除;那怎么办呢,
这时候就需要数据库迁移框架了:
对于django而言,框架内部就集成了数据库迁移模块了:
分为3步走:
1:修改modesl数据模型
2:生成迁移文件migrations
python manage.py makemigrations
可以看出生成了一个名为migrations的文件;
3:向数据库执行迁移操作:
python manage.py migrate
这时候就完成了django的数据库迁移操作;
对于flask相对要复杂一点,应为flask只有两个核心组间:一个是用 Werkzeug(路由模块) ,另一个是Jinja2 ,如果你想
使用别的功能是需要进行安装的
我们需要安装的有
1:flask_migrate
2:flask_script
flask是通过flask_migrate实现数据库的迁移的,并集成到flask_script中,让操作,通过命令实现;
具体如下
#导入模块
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate,MigreateCommand
from flask_script import Manger
#生成app实例
app = Flask(__name__)
# 生成数据库实例
db = SQLAlchemy(app)
# 生成flask_script实例通过Mange
manage = Manage(app)
# 生成迁移实例,需要用到app的实例和数据库实例
migrater = Migrate(app,db)
# 向flask_script中添加db命令
manger.add_command('db',MigrateCommand)
# 更改数据模型(models类)
#定义模型Role
class Role(db.Model):
# 定义表名
__tablename__ = 'roles'
# 定义列对象
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
def __repr__(self):
return 'Role:'.format(self.name)
#定义用户
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
def __repr__(self):
return 'User:'.format(self.username)
if __name__ == '__main__':
manger.run()
这时候需要用到命令了:
具体步骤如下:
1:生成迁移文件:
python database.py db init
2:生成迁移脚本
python database.py db migrate -m 'initial migration'
3:更新数据库:
python database.py db upgrade
如果你想回退你的迁移,需要用到命令:但是需要指定版本号;
通过python database.py db history 查看迁移的版本
python database.py db downgrade 版本号
总结:
对比两个框架可以明显看出django要更加的方便一点;内部已经提供了迁移的功能,只需要将app注册到installapp里面,执行几个命令就行了
但是对于flask而言,flask需要引入两个组件:flask_migrate flask_script
一个迁移库,一个命令库;
但是flask多了一个回退版本的功能;
两者在迁移的过程中的思路基本一致:
1:修改数据模型
2:生成迁移文件
3:执行迁移
但是flask多了一个更新操作;