前提
https://note.com/junyaaa/n/n9eab953c73c9 を参考にflask と sqlite3を連携させてtodo 管理アプリを作ろうとしています。
flask を使ってデータベースを作ろうと思いソースコードをそのまま実行したところ以下のエラーメッセージが発生しました。
実現したいこと
flask_sqlalchemyとsqliteを使ってデータベースを作成できるようにする。
発生している問題・エラーメッセージ
raise RuntimeError(unbound_message) from None RuntimeError: Working outside of application context. This typically means that you attempted to use functionality that needed the current application. To solve this, set up an application context with app.app_context(). See the documentation for more information.
該当のソースコード
python
from flask import Flask, render_template from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///potform.db' db = SQLAlchemy(app) class Post(db.Model): id = db.Column(db.Integer, primary_key=True) employee_name = db.Column(db.String(30), nullable=False) request_date = db.Column(db.DateTime, nullable=False) pot_from = db.Column(db.DateTime, nullable=False) pot_to = db.Column(db.DateTime, nullable=False) response_date = db.Column(db.DateTime, nullable=False) supervisor_approval = db.Column(db.Boolean, nullable=False) supervisor_note = db.Column(db.String(100)) hr_note = db.Column(db.String(100)) @app.route("/") def main(): return render_template("index.html") if __name__ == "__main__": app.run(debug=True, host='0.0.0.0', port=8888, threaded=True)
試したこと
python,sqlalchemy、flask_sqlalchemyのバージョン変更
sqlite3のpathを通す。(パスが通ってないことが問題かと思いました。)
補足情報(FW/ツールのバージョンなど)
vscode バージョン: 1.72.2 (user setup)
windows 11
どうかよろしくお願いいたします。
ここにより詳細な情報を記載してください。
全く同じエラーに関する質問が過去にもなされています.
きちんとエラー文で調べて解決法を探ってください.
https://teratail.com/questions/t0jqobknjvkkr5
失礼しました。上記の方法を試したのですがそれでもうまくいかなかったため、焦り、同じ内容を投稿してしまいました。
以後気をつけます。
「試したこと」の欄に書かれていなかったので伺いましたが試されていたのですね,
でしたら
with app.app_context(): db.create_all()
はどこに書いてダメだったんですか?
場所次第ではうまくいかなくて当然.となる場合もあります.
解答のため,質問のところにあるコードのファイル名を教えてください.
ご親切にありがとうございます。
app.pyです。
上記のコードの
hr_note = db.Column(db.String(100))
@app.route("/")
の間に以下のように書きました。
hr_note = db.Column(db.String(100))
from app import app, db
with app.app_context():
db.create_all()
@app.route("/")
よろしくお願いいたします。
> 以下のように書きました。
そうしたらどうなったのかを質問に書かないといけないのではないでしょうか
(それでどうなったのかで話が全然変わります)
おっしゃる通りです。失礼いたしました。
>>> from app import app,db
>>> with app.app_context():
... db.create_all()
...
という表示で止まりました。
改めてフォルダを見たところinsatanceの中に作成されていました。
丁寧にコメントくださりありがとうございました。
回答2件
あなたの回答
tips
プレビュー