flask中使用falsk-migrate和flask-script实现数据库迁移

作为一款轻量级的框架,flask有着django无可比拟的灵活度,但相应而来的便是学习的复杂度增加,不像django有那么丰富的内置模块。在django中有专门的models模块来是实现数据库的链接以及操作,而在flask中需要安装各种第三方库,主要的第三方库有:flask-sqlalchemy(操作数据库的orm),flask-migrate(类似django的migrations,可以更新数据库字段,sqlalchemy本身是不支持的),flask-script(可以以命令行的形式操作flask,类似django的python manage.py +命令),pymysql(sqlalchemy依赖pymysql)。
下面开始实现数据库的动态迁移。
flask项目的文件配置
上面是我的flask文件的分类,既然要实现数据库动态迁移,首先应该进行数据库连接配置,配置文件在settings目录里:

class BaseConfig(object):
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    SQLALCHEMY_TRACK_MODIFICATIONS = True

class DebugConfig(BaseConfig):
    DEBUG = True
    # SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(BASE_DIR, "Student_test.sqlite")
    SQLALCHEMY_DATABASE_URI = "mysql://root:123@localhost:9508/blog_flask"

在这里插入图片描述
然后在初始化文件中导入配置

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql
db = SQLAlchemy()
pymysql.install_as_MySQLdb()

app = Flask(__name__,template_folder="templates",static_folder="statics",static_url_path="/statics")
app.config.from_object("myblog.settings.DebugConfig")
db.init_app(app)

在这里插入图片描述
在models文件中创建数据库表,需要导入db
在这里插入图片描述
现在就完成了数据库表的创建,在models.py中使用db.create_all()就可以同步到数据库了,但是有一个问题,这种同步是无记忆的,就是说以后想要更新字段,就必须删库重来,这个时候flask-migrate就派上用场了,一般flask-migrate都是flask-script一起使用,以实现django中python manage.py makemigrations的效果。
创建manage.py文件,在文件中写入以下代码

from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand
from myblog.models import db
from myblog import app

manage = Manager(app) #实例化一个Manager对象,用它来管理app
migrate = Migrate(app,db)
manage.add_command("db",MigrateCommand) 
#添加数据库迁移管理的命令,有三个方法,init(初始化,生成一个migrations文件),migrate(django中的makemigrations),upgrade(django中的migrate)

if __name__ == "__main__":
    manage.run()

在这里插入图片描述
至此我们就可以在命令行中,实现数据库的动态创建,打开命令行,第一次创建时需要输入python manage.py db init,以后更新数据库时就不需要了。
在这里插入图片描述
这个时候会生成一个migrations文件
在这里插入图片描述
然后在命令行输入python manage.py db migrate
在这里插入图片描述
这是versions中会出现一个py文件,这个是用来保存对应版本的数据库操作的,他记录了你每次数据库的表名,字段的变更等。
最后在命令行中输入python manage.py db upgrade
在这里插入图片描述
此时models.py中的数据表就同步到数据库了,打开小绿猫查看一下吧。
在这里插入图片描述
额外多出一个alembic_version的表,这个是用来保存版本号的。
至此我们就使用flask-migrate和flask-script实现了数据库的动态迁移。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值