python+Flask+SQliteの学習を行っております。
色々調べていますが、SQliteのインポートが出来ず困っております。
具体的には、
from app import db
実行しましたが、何も表示されず、そのまま次に実施するdb.create_all()
もエラーとなってしまいます。
エラー内容については、一番最後のコマンド実行結果を参照ください。
sqlitへの環境変数も、Powershellで確認する限り、通っております。
本日、試行錯誤していましたが、自分では、解決できませんでした。
以下、私が実施した手順を記載致しますので、解決方法をご教示ください。
環境
- Win10 Pro
- 仮想環境(venv)を使用
- Python version 3.11.0
- Flask-SQLAlchemy 3.0.2
環境変数
$env:path.split(";")
C:\PC-Work\sqlite
flask-sqlalchemyインストール
pip install flask-sqlalchemy
インストール確認
Package Version ---------------- ------- click 8.1.3 colorama 0.4.6 Flask 2.2.2 Flask-SQLAlchemy 3.0.2 greenlet 2.0.1 itsdangerous 2.1.2 Jinja2 3.1.2 MarkupSafe 2.1.1 pip 22.3 setuptools 65.5.0 SQLAlchemy 1.4.45 Werkzeug 2.2.2
app.pyの作成
python
1# app.py 2 3from flask import Flask 4from flask import render_template 5from flask_sqlalchemy import SQLAlchemy 6from datetime import datetime 7import pytz 8 9app = Flask(__name__) 10app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///blog.db" 11db = SQLAlchemy(app) 12 13class Post(db.Model): 14 id = db.Column(db.Integer, primary_key=True) 15 title= db.Column(db.String(50), nullable=False) 16 body = db.Column(db.String(300), nullable=False) 17 created_at = db.Column(db.DateTime, nullable=False, 18 default=datetime.now(pytz.timezone('Asia/Tokyo'))) 19 20@app.route("/") 21def hello(): 22 return render_template('index.html') 23
仮想環境内で、VScodeのPowershellからpythonの対話モード起動
python
Python 3.11.0 (main, Oct 24 2022, 18:26:48) [MSC v.1933 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information.
以下コマンドを実行しても何もメッセージが表示されない。
from app import db
そのまま、以下コマンドを実行すると、Traceback が表示されてしまう。
db.create_all()
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\PC-Work\pydir\myproject\.venv\lib\site-packages\flask_sqlalchemy\extension.py", line 868, in create_all self._call_for_binds(bind_key, "create_all") File "C:\PC-Work\pydir\myproject\.venv\lib\site-packages\flask_sqlalchemy\extension. File "C:\PC-Work\pydir\myproject\.venv\lib\site-packages\flask_sqlalchemy\extension.py", line 628, in engines app = current_app._get_current_object() # type: ignore[attr-defined] File "C:\PC-Work\pydir\myproject\.venv\lib\site-packages\werkzeug\local.py", line 513, in _get_current_object raise RuntimeError(unbound_message) from None RuntimeError: Working outside of application context.
対話型環境から以下を実行
Flaskは実行状態で以下のコマンドを実行しています。
回答3件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
退会済みユーザー
2022/12/17 12:28
退会済みユーザー
2022/12/17 12:52