1. 程式人生 > >Flask之初學者(四)

Flask之初學者(四)

必須 方便 == -s 數據 需求變化 初始 只需要 run

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之初學者(四)