こんにちは、
InfraAcademyというインフラ学習サービスを運営しております、ryuと申します。
今回の記事では、Flaskでdbの初期化ができない場合の対処方法について解説します。Flaskでデータベースの初期化をする場合、flask db initコマンドを実行します。
そのコマンドを実行した際に、flask db init no such commandというエラーが発生しました。パッケージなどは正常にインストールできていますが、なぜかコマンドが無いというエラーが発生しました。
今回の記事では、このエラーの対処方法について解説します。
Flaskでdbの初期化コマンドが無いとエラーが出た場合の対処方法
Flaskでdbの初期化コマンドが無いとエラーが出た場合の対処方法は、以下のコマンドを実行したら、flask db initが使用できるようになりました。
export FLASK_APP=app.py
export FLASK_DEBUG=1
環境変数を設定すれば、「flask db init no such command」が出なくなりました。
環境変数の解説
exportコマンドは環境変数を設定します。
FLASK_APPという環境変数は、Flaskが実行するアプリケーションのエントリポイントを指定します。Flaskコマンドを実行する際に読み込まれるpythonファイルを設定します。
通常、flaskコマンドを実行すると、app.pyやwsgi.pyなどのファイルが読み取られ、flaskを動作させます。しかし、環境によって動作しないことがあるので、環境変数でエントリポイントを指定する必要があります。
よって、以下のコマンドを実行すると、flask db initが動作します。
export FLASK_APP=app.py
export FLASK_DEBUG=1
app.pyの部分は、Flaskの設定を記述しているファイル名を記述しましょう。一般的にはapp.pyですが、違う名前のファイルの場合は適宜変えてください。
また、exportコマンドの使い方については、こちらの記事で詳しく解説しています。
環境変数を設定しても動作しない場合
環境変数を設定しても動作しない場合は、app.pyの設定などが間違っている可能性があります。
念の為、手順を記載しておきます。
1.モジュールのインストール
pip install Flask Flask-SQLAlchemy Flask-Migrate
2.app.pyの設定
from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sample.db'
db = SQLAlchemy(app)
#modelの設定
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(200), nullable=False)
app.pyでは、SQLAlchemyを使うように設定を行います。またモデルの定義もしておきましょう。
このように設定していれば、動作すると思います。
まとめ
Flaskでdbの初期化ができない場合の対処方法について解説しました。対処方法としては、環境変数の設定を行います。
環境変数を設定することで、flaskコマンド実行時に正常にapp.pyなどのエントリポイントを読み取り、コマンドが動作します。
当ブログでは、このようなITに関する記事を発信しているので、興味のある方は引き続きご覧ください。