版权声明:FatPuffer https://blog.csdn.net/qq_42517220/article/details/88800613
安装依赖包
pip install Flask-Script
pip install flask-migrate
使用方法
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
app = Flask(__name__)
# 创建数据库sqlalchemy工具对象
db = SQLAlchemy(app)
# 创建flask脚本管理工具对象
manager = Manager(app)
# 创建数据库迁移工具对象
Migrate(app, db)
# 向manager对象中添加数据库操作命令
manager.add_command('db', MigrateCommand)
同步数据库
# 初始化,生成migrations文件夹
python db_demo.py db init
# 生成迁移文件
python db_demo.py db migrate
# 同步数据表
python db_demo.py db upgrade
示例演示
# coding:utf-8
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
app = Flask(__name__)
# create database db_flask default charset utf8 collate utf8_general_ci;
class Config(object):
"""配置参数"""
SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/db_flask"
# 设置sqlalchemy自动跟踪数据库
SQLALCHEMY_TRACK_MODIFICATIONS = True
SECRET_KRY = '#%*(_)?./DFVDjnd34534'
app.config.from_object(Config)
# 创建数据库sqlalchemy工具对象
db = SQLAlchemy(app)
# 创建flask脚本管理工具对象
manager = Manager(app)
# 创建数据库迁移工具对象
Migrate(app, db)
# 向manager对象中添加数据库操作命令
manager.add_command('db', MigrateCommand)
# 创建数据库模型类
class Role(db.Model):
"""用户角色表"""
__tablename__ = 'tbl_roles'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32), unique=True)
# 需要手动添加,方便使用Role.user查询用户对象,user列不是真实存在的,backref="role"为了方便通过User.role获取角色对象,
# 因为使用User.role_id只能获取到角色id,要想获取角色对象,还需要再在Role表中查询一次
users = db.relationship("User", backref="role")
def __repr__(self):
"""定义之后,可以让显示对象的时候更直观,类似于Django中的__str__"""
return "Rloe object: name=%s" % self.name
class User(db.Model):
"""用户表"""
__tablename__ = 'tbl_users' # 指明数据库表名
id = db.Column(db.Integer, primary_key=True) # 整型主键,会默认设置为自增主键
name = db.Column(db.String(64), unique=True)
email = db.Column(db.String(128), unique=True)
password = db.Column(db.String(128), nullable=False) # nullable=False 参数必须传
role_id = db.Column(db.Integer, db.ForeignKey("tbl_roles.id"))
if __name__ == '__main__':
# 通过manager对象启动程序
manager.run()
python db_demo.py db init
python db_demo.py db migrate
python db_demo.py db upgrade
生成迁移文件时添加说明信息:
python db_demo.py db migrate -m "XXXXXX"
查看历史纪录
python db_demo.py db history
回退
python db_demo.py db downgrade 版本编号(通过history查看)