2
1

More than 1 year has passed since last update.

flaskでSQLiteのデータベース作成時に発生するapp.app_context()に関するエラーを解決する。

Last updated at Posted at 2023-01-27

flaskでSQLiteのデータベースを作成するときに、以下のようなエラーが発生した。teratailでのとある質問のやりとりが参考になったので、紹介しようと思う。

発生したエラー

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.

エラーが発生するまでの流れ

1. app.pyに以下のコードを記述

app.py
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import pytz

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
db = SQLAlchemy(app)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(50), nullable=False)
    body = db.Column(db.String(300), nullable=False)
    created_at = db.Column(db.DateTime, nullable=False, default=datetime.now(pytz.timezone('Asia/Tokyo')))

#以下、今回のエラーとは関係のない部分
@app.route("/")
def index():
    title = "Hello"
    return render_template("index.html", title=title)

2. コマンドプロンプトで以下のコマンドを実行(このコマンドは、エラーが発生した時のものです。)

以下のコマンドは、エラーが発生したコマンドです。
以下のコマンドは実行しないでください。

cmd
app.pyのあるディレクトリ>python
>>>from app import app,db
>>> db.create_all()

正しい実行コマンド

2. コマンドプロンプトで以下のコマンドを実行

以下のコマンドが正しいものです。

cmd
app.pyのあるディレクトリ>python
>>>from app import app,db
>>>with app.app_context():
...   db.create_all()
...
>>>exit()

実行結果

app.pyと同ディレクトリにinstanceフォルダーが作成され、その中に.dbファイルが作成されました。

参考にさせていただいたサイト記事

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1