Python

Flaskでdbの初期化コマンドが無いとエラーが出た場合の対処方法”flask db init no such command”

こんにちは、

InfraAcademyというインフラ学習サービスを運営しております、ryuと申します。

今回の記事では、Flaskでdbの初期化ができない場合の対処方法について解説します。Flaskでデータベースの初期化をする場合、flask db initコマンドを実行します。

そのコマンドを実行した際に、flask db init no such commandというエラーが発生しました。パッケージなどは正常にインストールできていますが、なぜかコマンドが無いというエラーが発生しました。

今回の記事では、このエラーの対処方法について解説します。

サーバー構築を実践で身につけるInfraAcademy

※本ページには、プロモーション・アフィリエイトリンクが含まれています

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コマンドの使い方については、こちらの記事で詳しく解説しています。

【Linux】exportコマンドの使い方解説!環境変数の設定をしよう こんにちは、フルスタックエンジニアのryuです。 今回の記事では、exportコマンドの使い方を解説します。ex...

環境変数を設定しても動作しない場合

環境変数を設定しても動作しない場合は、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に関する記事を発信しているので、興味のある方は引き続きご覧ください。

ABOUT ME
ryu@InfraAcademyというインフラ学習サービス運営
大手企業→上場ベンチャー→スタートアップでエンジニアをしていました。 インフラエンジニア歴10年以上。 Linuxやネットワークの学習ができるサービスInfraAcademyを運営中。
RELATED POST