【python-flask学习笔记】3.6 SQLAlchemy-flask-migrate

1、简介及安装

  • 在实际开发中经常存在后期进行数据库修改行为,一般我们修改数据库不会手动修改,而是修改ORM对应的模型,然后把数据库模型映射到数据库中。
  • 之前的方法db.creat_all()方法只在第一次运行时会执行,在后期再次修改数据库的字段时,不会再自动的映射到数据库中,必须删除表,然后重新运行db.creat_all()才能生效,重新进行映射。这不符合我们的需求。
  • 因此flask-migrate就是解决这个问题的。flask-migrate是基于Alembic进行的一个封装,并集成到Flask中,而所有的迁移操作其实都是Alembic做的,他能跟踪模型的变化,并将变化映射到数据库中
    使用flask-migrate需要安装,命令如下:(首先需要激活本项目的虚拟环境)
pip install flask-migrate

使用flask_migrate必须借助flask_scripts,这个包的MigrateCommand中包含了所有和数据库相关的命令。

2、准备工作

  • 在新的项目中新建一个config.py文件,连接数据库驱动。
  • 新建一个exts.py文件:
# exts.py
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
  • 新建一个models.py文件:
# models.py
from exts import db

# 创建映射表
class Article(db.Model):    #模型必须继承db.Model
    #db.Column映射到表中字段,primary_key主键,autoincrement自增,nullable可为空(默认为True)
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key= True, autoincrement = True)
    title = db.Column(db.String(100),nullable = False)
    content = db.Column(db.Text, nullable = False)
  • 主app文件flaskmigrate.py
# flaskmigrate.py
from flask import Flask
from exts import db
import config
from models import Article

app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)

@app.route('/')
def index():
	return 'hello Python'
if __name__=='__main__':
	app.run(debug=True)
  • manager.py文件:
# manager.py
from flask_script import Manager
from flaskmigrate import app
from flask_migrate import Migrate,MigrateCommand
from exts import db
from models import Article

manager = Manager(app)

# 1.要使用flask_migrate,必须绑定app和db
migrate = Migrate(app,db)

# 2.把MigrateCommand命令添加到manager中
manager.add_command('db',MigrateCommand)

if __name__ == '__main__':
	manager.run()

注意: 一定不要忘记在flaskmigrate.py文件中导入Article数据表模型类,

3、运行

调试需要在终端命令行进行。
在调试前,可以先观察下,在该项目中不存在migrations这个文件夹
下面开始运行flask_migrate相关的命令:(依次运行下面的三条命令)

  • python manage.py db init 初始化一个迁移脚本的环境,只需要执行一次,执行完该条鱼具后,我们可以观察到在该项目下被创建了一个migrations文件夹,但是migrations/versions文件夹下是空的。
  • python manage.py db migrate 将模型生成迁移文件,该条语句执行完后,会发现该项目下的migrations/versions文件夹内有文件了。在后期如果对模型进行了修改,就需要再执行一次这个命令。
  • python manage.py db upgrade 最后添加将映射文件真正的映射到数据库中。此时查看数据库的中被创建了article这个表,且表中有已定义的几个字段。在后期如果对模型进行了修改,就需要执行完上一个命令后,再执行一次这个命令。

注意: 在后期如果对模型进行了修改,就需要再一遍上面的第2-3条命令。,第一条命令无需再运行。
举例:
如果我们对models.py文件中的Article类进行了修改,比如添加了一个字段tags ,如下:

# models.py
from exts import db

# 创建映射表
class Article(db.Model):    #模型必须继承db.Model
    #db.Column映射到表中字段,primary_key主键,autoincrement自增,nullable可为空(默认为True)
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key= True, autoincrement = True)
    title = db.Column(db.String(100),nullable = False)
    content = db.Column(db.Text, nullable = False)
    tags = db.Column(db.String(100), nullable = False)

则只需再在终端执行python manage.py db migratepython manage.py db upgrade这两条命令就可实现对article这个表的修改,即被添加了tags这个字段。


以上笔记整理自知了课堂黄勇老师讲解的教学视频《Flask框架入门到实战开发》的第三章第12小节内容,不足之处,望不吝赐教!

发布了44 篇原创文章 · 获赞 5 · 访问量 4505

猜你喜欢

转载自blog.csdn.net/ljb0077/article/details/96120267