本文摘自php中文网,作者不言,侵删。
本篇文章给大家带来的内容是关于python中flask_migrate,flask_script的使用介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
flask_migrate
在使用falsk_sqlalchemy时,采用'db.create_all'在后期修改数据库表字段的时候,不会自动的映射到数据库中,必须删除表,
然后重新运行'db.create_all' 才会重新映射。这样不符合我们的要求,因此flask-migrate就是为了解决
这个问题。它可以在每次修改模型(class)后,可以将修改的字段映射到数据库中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | from flask_sqlalchemy import SQLAlchemy
from flask import Flask
import pymysql
from sqlalchemy import desc
from flask_bootstrap import Bootstrap
app = Flask(__name__)
app.config[ 'SQLALCHEMY_DATABASE_URI' ] = 'mysql+pymysql://root:sheen@localhost/migrate_sql'
app.config[ 'SQLALCHEMY_TRACK_MODIFICATIONS' ] = True
db = SQLAlchemy(app)
app.config[ 'SECRET_KEY' ] = 'SHEEN'
bootstrap = Bootstrap(app)
class User(db.Model):
id = db.Column(db.INTEGER,autoincrement=True,primary_key=True)
# 用户名唯一且不能为空
name = db.Column(db.String(30),unique=True,nullable=False)
# 测试:添加gender属性
gender = db.Column(db.BOOLEAN, default =True)
todos = db.relationship( 'Todo' ,backref= 'user' )
class Todo(db.Model):
id = db.Column(db.INTEGER, autoincrement=True, primary_key=True)
# unique: 指定该列信息是唯一的;
name = db.Column(db.String(50))
user_id = db.Column(db.INTEGER,db.ForeignKey( 'user.id' ))
if __name__ == '__main__' :
db.create_all()
|
当已经生成数据库表user和todo时,并且表中包含数据时。此时,要求我们对数据库表添加属性(用户性别),且不影响用户使用,我们使用数据库迁移migrate的方式来处理,在原始数据库操作文件model中加上生成属性的代码
1 2 | # 测试:添加gender属性
gender = db.Column(db.BOOLEAN, default =True)
|
migrate主要属性
创建迁移仓库(migrations目录)
1 | python manager.py db init
|
读取类的内容, 生成版本文件, 并没有真正在数据库中添加或删除;
1 | python manager.py db migrate -m "添加性别"
|
在数据库中曾删改;
1 | python manager.py db upgrade
|
去查看改变的历史状态;
1 | python manager.py db history
|
返回指定的版本状态;
1 | python manager.py db downgrade base
|

管理数据库变更
新建manage.py文件来管理数据库变更
1 2 3 4 5 6 7 8 9 | from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from models import app,db
migrate = Migrate(app,db)
manager = Manager(app)
manager.add_command( 'db' ,MigrateCommand)
if __name__ == '__main__' :
manager.run()
|
步骤:
1 2 3 4 5 6 7 8 9 10 | 1. 初始化(自动生成migrations目录)
python manager.py db init
2. 生成最初的迁移
python manager.py db migrate -m '添加用户性别'
出现语句:Detected added column 'user.gender' ,表明对model有所改动
3.数据库升级
python manager.py db upgrade
生成数据库历史版本的py文件:Running upgrade -> 202a710ebeb6, '添加用户性别'
|
flask_script
Flask Script扩展提供向Flask插入外部脚本的功能,使得脚本和系统分开
整体框架
首先,创建一个Python模板运行命令脚本,可起名为script.py
在该文件中,必须有一个Manager实例,Manager类追踪所有在命令行中调用的命令和处理过程的调用运行情况
Manager只有一个参数——Flask实例
1 2 3 4 5 6 7 8 | from flask_script import Command,Manager
from flask import Flask
app = Flask(__name__)
manager = Manager(app)
if __name__ == '__main__' :
manager.run()
|
创建命令
其次,创建并加入命令。
有三种创建命令的方式,即创建Command子类、使用@command修饰符、使用@option修饰符
第一种--创建Command子类
子类必须定义一个run方法
创建Hello命令,并将Hello命令加入Manager实例
1 2 3 4 5 6 | class Hello(Command):
"" "欢迎信息" ""
def run(self):
print ( 'hello,sheen' )
manager.add_command( 'hello' ,Hello)
|
第二种——使用Command实例的@command修饰符
1 2 3 4 5 | @manager.command
def add_user():
"" "添加用户信息" ""
print ( '添加用户成功' )
|
第三种——使用Command实例的@option修饰符
建议使用@option;,可以传入有多个参数
1 2 3 4 5 6 7 8 | @manager.option( '-n' , '--name' ,help= '删除用户' )
def del_user(name):
"" "删除用户信息" ""
if name:
print ( '删除用户%s成功' %(name))
else :
print ( '用户名为空!' )
|
完整示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # script.py
from flask_script import Command,Manager
from flask import Flask
app = Flask(__name__)
manager = Manager(app)
class Hello(Command):
"" "欢迎信息" ""
def run(self):
print ( 'hello,sheen' )
manager.add_command( 'hello' ,Hello)
@manager.command
def add_user():
"" "添加用户信息" ""
print ( '添加用户成功' )
@manager.option( '-n' , '--name' ,help= '删除用户' )
def del_user(name):
"" "删除用户信息" ""
if name:
print ( '删除用户%s成功' %(name))
else :
print ( '用户名为空!' )
if __name__ == '__main__' :
manager.run()
|

以上就是python中flask_migrate,flask_script的使用介绍(附代码)的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
Python中reverse、sort、sorted三个列表排序使用方法详解
Python人工智能难吗
Python是什么语言编写出来的
Python字典dict类型合并详解
golang和Python有什么区别?
Python是什么意思?怎么读?
Python下如何实现文件的修改操作?(附示例)
Python分数怎么表示什么
Python函数中参数的详细介绍
电脑64位怎么下载Python
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » python中flask_migrate,flask_script的使用介绍(附代码)