Flask Web開発入門10

はじめに

ここまでで、実際にデータベースモジュールと、モデルの定義まで完了した。
今回は、モデルで定義した内容をデータベースに反映させる必要がある。

データベースへの反映作業は、モデルを定義した後に1度だけ行う必要がある。
今回はスクリプトというファイルを作成して実行する方法を利用する。

スクリプトを作成して実行

スクリプトを管理・実行するのに便利なFlask-Scriptというライブラリをインストールする。

pipenv install Flask-Script

実際のスクリプトファイルの作成。
flask_blog以下にscriptsというフォルダを作成し、その中にds.pyというファイルを作成する。

from flask_script import Command

from flask_blog import db

 

class InitDB(Command):

    "create database"

    def run(self):

        db.create_all()

1行目のfrom flask_script import Commandで、先ほどインストールしたFlask-Scriptライブラリをインポートする。合わせて、今回はデータベースへのkモデル定義へ反映を行うので、事前に定義したdbモジュールをインポートしている。

次に、実際のスクリプト実行内容を定義する。

classInitDB(Command):とクラスを定義する。
(Command)とすることで、スクリプト実行のためのクラスが定義される。
“create database”は、クラスの説明のためのコメントである。

def run(self)は、実際にスクリプtpで実行される内容である。
実行内容として、db.create_all()とすることでモデル定義が反映される。

manage.pyの作成

次に作成したスクリプトファイルを、コンソール上で実行で着るよう登録する。
アプリケーションフォルダ直下にmanage.pyという名前のファイルを作成する。

from flask_script import Manager

from flask_blog import app

 

from flask_blog.scripts.db import InitDB

 

if __name__ == "__main__":

    manager = Manager(app)

    manager.add_command('init_db', InitDB())

    manager.run()

1行目にて、from flask_script import ManagerとFlask-ScriptライブラリのManagerというモジュールをインストールする。

3行目にて、from flask_blog.scripts.db import InitDBと先ほど作成したスクリプトモジュールをインポートする。

if__name__ ==”__main__”:の中が、実際にスクリプトファイルを登録している。
Manager.add_command(‘init_db’, InitDB())とすることで、作成したInitDB()モジュールをinit_dbという名前で実行できるようにしている。
最後に、作成したスクリプトファイルを実行する。
pythonインタプリタを使わずとも、コンソール上で実行可能になっている。

python manage.py init_db

実行後、flask_blog以下にflask_blog.dbというファイルが作成される。

終わりに

次回はCRUDという考えについて学ぶ。データベースを使ってブログ投稿機能を作っていく。

コメント