flask和django区别-数据库的迁移

背景

在很多时候,在我们设计好模型之后,又需要进行一定的改变和更新数据操作;,最直接的方式就是删除原来的旧表,但是随之而来的问题就是我们之前的数据也会删除;那怎么办呢,

这时候就需要数据库迁移框架了:

对于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多了一个更新操作;

猜你喜欢

转载自blog.csdn.net/weixin_38859557/article/details/83822105
今日推荐