摘要:它可以在每次修改模型后,可以將修改的字段映射到數據庫中用戶名唯一且不能為空測試添加屬性指定該列信息是唯一的當已經生成數據庫表和時,并且表中包含數據時。
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()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44911.html
閱讀 2861·2021-10-14 09:50
閱讀 1218·2021-10-08 10:21
閱讀 3646·2021-10-08 10:16
閱讀 3063·2021-09-27 14:02
閱讀 3135·2021-09-23 11:21
閱讀 2109·2021-09-07 10:17
閱讀 407·2019-08-30 14:00
閱讀 2105·2019-08-29 17:26