数据库迁移
- 目的: 当数据库的表结构发生变化之后,如果直接删除原有的数据,再添加新的数据,有可能导致数据丢失
- 注意点:
- 是为了备份表结构,而不是数据
- 如果想要备份数据,需要使用工具,navicat,mysqlworkbench,等等
- 更新的过程数据一般不会丢失,做降级的时候需要谨慎操作
- 操作流程:
-
安装扩展
pip install flask_script pip install flask_migrate
-
导入三个类
from flask_script import Manager from flask_migrate import Migrate, MigrateCommand
-
通过Manager类创建对象manager,管理app
manager = Manager(app)
-
使用Migrate,关联db,app
Migrate(app,db)
-
给manager添加一条操作命令
manager.add_command("db",MigrateCommand)
-
- 相关迁移命令:
-
生成迁移文件夹[一次就好]
python xxx.py db init
-
将模型类生成迁移脚本[重复执行]
python xxx.py db migrate -m '注释'
-
将迁移脚本更新到数据库中[重复执行]
python xxx.py db upgrade/downgrade [version]
-
其他命令
-
查看最新版本的命令
python xxx.py db show
-
查看当前版本
python xxx.py db current
-
查看所有的历史版本
python xxx.py db history
-
-
示例:
from flask import Flask
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@localhost:3306/data36'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 创建SQLAlchemy对象,关联app
db = SQLAlchemy(app)
# 3.通过Manager类创建对象manager,管理app
manager = Manager(app)
# 4.使用Migrate,关联db,app
Migrate(app, db)
# 5.给manager添加一条操作命令
manager.add_command("db", MigrateCommand)
# 6.编写模型类
class Student(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32))
age = db.Column(db.Integer)
@app.route('/')
def index():
return "hello world"
if __name__ == '__main__':
manager.run()