這篇文章帶給大家的內容是關於python中flask_migrate,flask_script的使用介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
flask_migrate
在使用falsk_sqlalchemy時,採用'db.create_all'在後期修改資料庫表格欄位的時候,不會自動的對應到資料庫中,必須刪除表,
然後重新執行'db.create_all' 才會重新映射。這樣不符合我們的要求,因此flask-migrate就是為了解決
這個問題。它可以在每次修改模型(class)後,可以將修改的欄位對應到資料庫中
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中加上產生屬性的程式碼
# 测试:添加gender属性 gender = db.Column(db.BOOLEAN,default=True)
migrate主要屬性
建立遷移倉庫(migrations目錄)
python manager.py db init
讀取類別的內容, 產生版本檔案, 並沒有真正在資料庫中新增或刪除;
python manager.py db migrate -m "添加性别"
在資料庫中曾刪改;
python manager.py db upgrade
去查看改變的歷史狀態;
python manager.py db history
返回指定的版本狀態;
python manager.py db downgrade base
#管理資料庫變更
新manage.py檔案來管理資料庫變更
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. 初始化(自动生成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實例
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實例
class Hello(Command): """欢迎信息""" def run(self): print('hello,sheen') manager.add_command('hello',Hello)
第二種-使用Command實例的@command修飾符
@manager.command def add_user(): """添加用户信息""" print('添加用户成功')
第三種-使用Command實例的@option修飾符
建議使用@option;,可以傳入有多個參數
@manager.option('-n','--name',help='删除用户') def del_user(name): """删除用户信息""" if name: print('删除用户%s成功' %(name)) else: print('用户名为空!')
完整範例
# 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的使用介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!