Flask之初學者(四)
Flask通過DOS命令行操作管理項目和數據庫遷移操作
一、插件安裝
- flask-script:在(虛擬)環境中使用“pip install flask-script”進行安裝即可,此插件可以通過命令行更方便地去操作flask。
- flask-migrate:在(虛擬)環境中使用“pip install flask-migrate”進行安裝即可,此插件可以對數據庫進行遷移操作,比如當你改變了model中的內容時(如增加了一列,一般在運行項目時,如果數據庫中已經建好了這張表,此時在代碼中的改變不會更新到數據庫中去的),就可以通過此插件同步更新到數據庫中。
二、flask-script使用
1. 主文件:一般用於啟動flask-script的Manager,可以通過主文件調用所有的函數(必須是被[Manager_obj].command裝飾的函數才能被調用,而且一般不會所有的函數都定義在主文件中),比如新建並寫好一個簡單的py文件“manage.py”,然後就可以在DOS中使用命令“python manage.py runserver”調用了:
from flask_script import Manager from flask_script_migrate_demo import app # 實例化Manager,app為Flask實例對象,可以從其他文件導入 manage = Manager(app) # 使用此裝飾器裝飾的函數才能在DOS中調用 @manage.command def runserver(): # ... # print(‘The server has been started!‘) if __name__ == ‘__main__‘: manage.run() # 啟動Manager
2. 子文件:子文件一般用於放置操作函數,然後通過主文件來調用,需要註意是子文件中的函數同樣需要裝飾器“[Manager_obj].command”,不過子文件中的Manager實例化不需要app(Flask對象)了,同時需要使用“[Manager_obj].add_command(‘[sub_manager_obj_name]‘, [sub_manager_obj])”將子文件中的Manager添加到主文件中,“sub_manager_obj_name”為子文件Manager的別名(DOS調用的就是它),如下代碼在DOS中使用命令“python manage.py db db_init”調用即可:
from flask_script import Manager from flask_script_migrate_demo import app from db_scripts import DBManage manage = Manager(app) # 將子文件db_scripts的Manager對象DBManage導入,別名db_manage將用於DOS調用 manage.add_command(‘db_manage‘, DBManage) if __name__ == ‘__main__‘: manage.run() # 啟動Manager
from flask_script import Manager # 需要APP(Flask對象)來實例化 DBManage = Manager() # 同樣需要command裝飾器 @DBManage.command def db_init(): # ... # print(‘The database has been initialized successfully!‘)
三、flask-migrate使用
1. 一般數據庫模型類都是使用專門的py來定義存放的,比如“models.py”,當需求變化時,可能這些Model都已經映射到數據庫中了,再想要修改時(比如新增加一列),如果沒有其他插件,就只能刪除數據庫中的表,再重新生成了,顯然這是不實用的,所以flask-migrate就顯得非常有用了,它可以將代碼中對數據庫的修改同步更新(遷移操作)到數據庫中。
2. flask-migrate插件是依賴於flask-script的,所以要使用flask-migrate,就需要先裝好flask-script。
3. 基本使用(from flask_migrate import Migrate, MigrateCommand):
-
- Migrate實例化需要傳入app(Flask對象)和db(SQLAlchemy對象);
- 使用flask-script插件中Manager的add_command將MigrateCommand添加到主文件的Manager中,這樣就可以通過DOS來進行操作了;
- 需要用到的模型類Model需要導入到主文件中,沒有導入的Model的所有操作都不會生效的;
- 在DOS命令行中使用:第一次執行manage.py的時候,需要依次使用命令“python manage.py db_migrate init”(初始化遷移環境)、“python manage.py db_migrate migrate”(生成對應的遷移文件)和“python manage.py db_migrate upgrade”(將遷移文件同步更新到數據庫中)來完成數據庫的映射,當之後你的model類中有改變時,只需要依次運行後面兩個命令“migrate”和“upgrade”即可對數據庫進行同步更新。“manage.py”和“db_migrate”是自定義的,見如下代碼:
from flask_script import Manager from flask_script_migrate_demo import app from flask_migrate import Migrate, MigrateCommand from extends import db # db為SQLAlchemy對象 from models import User # User為db.Model的子類,即模型類,其他未導入的模型類就不能映射到數據庫了 manage = Manager(app) migrate = Migrate(app, db) # 將MigrateCommand添加打Manager中,並取別名db_migrate manage.add_command(‘db_migrate‘, MigrateCommand) if __name__ == ‘__main__‘: manage.run() # 啟動Manager
Flask之初學者(四)