Q&A
Flaskでのアプリケーションの作成は初めてですが、MySQLに接続し、テーブルの作成を行いたく、Flask-SQLAlchemyでモデルを別々のファイルに分割しようと考えております。
実行すると、下記エラーが吐かれてしまいます。
RuntimeError: No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.
階層構造
skip/
├ app.py
├ database.py
├ config.py
├ views/
| └ skip_view.py
└ models/
| └ user.py
環境
・CentOS7
・Python3.6
・Flask2.0.2
・Flask-SQLAlchemy2.5.1
発生しているエラーログ
Traceback (most recent call last): File "/var/www/skip/app.py", line 2, in <module> from views import skip_view File "./views/skip_view.py", line 3, in <module> from models.user import User File "./models/user.py", line 1, in <module> from database import db File "./database.py", line 1, in <module> from flask_sqlalchemy import SQLAlchemy ModuleNotFoundError: No module named 'flask_sqlalchemy'
該当するソースコード
app.py
1from flask import Flask 2from views import skip_view 3from database import db 4import config 5 6def create_app(): 7 app = Flask(__name__) 8 9 # DB設定を読み込む 10 app.config.from_object('config.Config') 11 db.init_app(app) 12 13 app.register_blueprint(skip_view.app) 14 return app 15 16app = create_app() 17 18if __name__ == "__main__": 19 app.run()
database.py
1from flask_sqlalchemy import SQLAlchemy 2 3# FlaskがSQLAlchemyを使えるように初期化 4db = SQLAlchemy() 5 6def init_db(app): 7 db.init_app(app)
config.py
1class SystemConfig: 2 # DBの接続情報を設定 3 SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{user}:{password}@{host}/{db_name}?charset=utf8'.format(**{ 4 'user': 'xxxx', 5 'password': 'xxxxxxxx', 6 'host': '127.0.0.1', 7 'db_name': 'xxxx' 8 }) 9 10Config = SystemConfig
views/skip_view.py
1from flask import Blueprint, render_template 2from models.user import User 3 4# Blueprintのオブジェクトを生成する 5app = Blueprint('views', __name__) 6 7@app.route('/login', methods=['GET','POST']) 8def login(): 9 title = "ログイン" 10 return render_template('login.html', title=title)
models/user.py
1from database import db 2 3class User(db.Model): 4 __tablename__ = 'users' 5 id = db.Column(db.Integer, primary_key=True) 6 nickname = db.Column(db.String(30), unique=True, nullable=True) 7 email = db.Column(db.String(300), unique=True, nullable=True) 8 password = db.Column(db.Text, nullable=True) 9 first_name = db.Column(db.String(30), nullable=True) 10 last_name = db.Column(db.String(30), nullable=True) 11 12db.create_all()
同様のエラーが無いか探してみたところ、テーブルを作成する際に、アプリケーションコンテキストをプッシュするために、「with app.app_context()」を使用するという記事を見たのですが、上手くいかずという状況です。
エラー文からflask_sqlalchemyが読み込まれていないことが原因だと思うのですが、参考にしているサイトでは、上記のコードで記載されていたので、何が原因なのかが分かりませんでした。
何か原因が分かる方がいらっしゃいましたら、ご教授頂けますと幸いです。
その他に必要な情報がありましたら提示いたします。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
退会済みユーザー
2022/01/15 15:41
退会済みユーザー
2022/01/16 05:01