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ファイルが作成されました。
参考にさせていただいたサイト記事