質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Q&A

解決済

2回答

2527閲覧

Flask-SQLAlchemyを使うために不足している箇所はなにか?なぜか動かない。。

sequelanonymous

総合スコア123

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

0グッド

0クリップ

投稿2018/08/02 11:51

編集2018/08/02 11:51

Flask-SQLAlchemyの書き方を勉強しています。
以下のコードまでは書いてみました。実際にORMとマイグレーションツールをつかってテーブルができるまでを第一目標としています。

チュートリアルを書いてみたのはいいものの、動かし方がわかっていません。
manage.pyを動かしてサーバーを立てた状態で以下のコマンドをやってもこのようなエラーがでました。

flask db initの実行場所を間違えているのでしょうか?
加えて、DBモデルのコードで何か不足している点、書き間違えている点をご指摘頂きけませんでしょうか?

t@MAC ~/l/c/dev> flask db init Usage: flask db init [OPTIONS] Error: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module was not found in the current directory.

modelのコード

flask

1from sqlalchemy import create_engine 2from sqlalchemy.orm import scoped_session, sessionmaker 3from sqlalchemy.dialects.mssql import TINYINT 4from flask_sqlalchemy import SQLAlchemy 5from flask_migrate import Migrate 6from a.config import test 7from a import create_app 8 9app = create_app(test) 10db = SQLAlchemy(app) 11migrate = Migrate(app, db) 12 13 14engine = create_engine(test, echo=True) 15db_session = scoped_session(sessionmaker(autocommit=False, 16 autoflush=False, 17 bind=engine)) 18 19 20class Master(db.Model): 21 __tablename__ = 'master' 22 23 master_id = db.Column(db.String(225), primary_key=True, nullable=False) 24 account_id = db.Column(db.String(225), primary_key=True, nullable=False) 25 user_id = db.Column(db.String(225)) 26 27... 28

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ファイル名や、コマンド実行時のタイプミスかなと思います。

If FLASK_APP is not set, the command will look for a file called wsgi.py or app.py and try to detect an application instance or factory.

上の引用に沿う形で、質問文にあるコードを自分の環境で試してみました。

コードをmanage.pyとして、次のように実行します。

$ FLASK_APP=manage flask db init Usage: flask [OPTIONS] COMMAND [ARGS]... Error: No such command "db".

別のエラーが出ていますが、Flaskのアプリケーションとして、認識してくれているようです。

何か問題の解決につながれば幸いです。

投稿2018/08/04 03:22

編集2018/08/04 03:32
niciyan2486

総合スコア62

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sequelanonymous

2018/08/05 05:23

実行ありがとうございました。 勝手にmodelの記述が原因でエラーを吐き出しているとおもっていましたが、typoのようでした。
sequelanonymous

2018/08/05 05:23

実行ありがとうございました。 勝手にmodelの記述が原因でエラーを吐き出しているとおもっていましたが、typoのようでした。
guest

0

ベストアンサー

You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module was not found in the current directory.

とそのものズバリ書いてあると思うのですが、読んでないのでしょうか。

http://flask.pocoo.org/docs/1.0/cli/

The FLASK_APP environment variable is used to specify how to load the application.
(略)
If FLASK_APP is not set, the command will look for a file called wsgi.py or app.py and try to detect an application instance or factory.

とありますね。
環境変数FLASK_APPで指定するか、wsgi.py か app.py を置く必要がある、と。

flask_migrateは使ってないのでわかりませんが、

FLASK_APP=(ファイル名の拡張子を除いた部分) flask db init ``` とでもすればいいんじゃないかと想像します。 ---- ``` FLASK_APP=モジュール名 flask db init ``` か ``` export FLASK_APP=モジュール名 flask db init ``` でいいと思います。 ---- ``` FLASK_APP=モジュール名 flask db init ``` は駄目です。 参考 [https://qiita.com/pink/items/73e712345cfabaef31e8](https://qiita.com/pink/items/73e712345cfabaef31e8)

投稿2018/08/02 14:35

編集2018/08/03 00:54
quickquip

総合スコア11029

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sequelanonymous

2018/08/02 17:24 編集

コメントありがとうございます!上の方が切れており上手くコピペできていませんでしたが、FLASK_APP=(ファイル名の拡張子を除いた部分)は設定してやってエラー画面がでています。 ちなみに、どのファイル名を記入したほうがよいとおっっしゃっていますでしょうか? FLASK_APP environment variableを指すものは何かという質問と同義かもしれません。 私は、 app.runが記述されたファイルのことだと認識しています。
quickquip

2018/08/02 22:57

精確には指定するのはモジュール名。app(かapplication)という名前のattributeを持っていて、それがFlaskクラスのインスタンスである必要がある。それがなければcreate_app(かmake_app)というファクトリ関数を持っているかを探す。それか、`モジュール名:属性名`でFlaskクラスのインスタンスを指定する。と、回答に書いたurlで説明されている。
quickquip

2018/08/02 22:59

app.run()が**実行される**ようなモジュールを指定したら、サーバが実行されてしまってまずいんじゃないでしょうか?
sequelanonymous

2018/08/06 03:18 編集

ありがとうございます! ``` export FLASK_APP=manage:app_test flask db init ``` で実行しました。 また、 migrationに関わるコードはあまりmodelファイルに書かないほうが良いみたいで migrate = Migrate(app, db)のコードをenv.pyに書いてmigrationの実行までできるようになりました。 ご丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問