質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

829閲覧

python Win10 SQLiteインストールについて

退会済みユーザー

退会済みユーザー

総合スコア0

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/12/17 10:35

編集2022/12/17 12:29

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は実行状態で以下のコマンドを実行しています。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

https://flask.palletsprojects.com/en/2.2.x/api/#flask.Flask.app_context

Python対話環境から実行するなら

from app import app, db with app.app_context(): db.create_all()

です。

投稿2022/12/17 11:38

quickquip

総合スコア11038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/12/17 12:28

対話型環境から実行してみましたが、何も起きません。 本文にキャプチャーを掲載しますのでご確認ください。
退会済みユーザー

退会済みユーザー

2022/12/17 12:52

解決しました。 db.create_all()の後、enterを押したら、dbが作成されました。
guest

0

エラーメッセージに含まれている、"Working outside of application context." という文字列で検索してみると、以下のような文章に辿り着きました。

python

1$ python3 2Python 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0] on linux 3Type "help", "copyright", "credits" or "license" for more information. 4>>> import flask 5>>> print(flask.globals._no_app_msg) 6Working outside of application context. 7 8This typically means that you attempted to use functionality that needed 9the current application. To solve this, set up an application context 10with app.app_context(). See the documentation for more information.

なので、以下の様にすれば、あるいは上手く行くかもしれません。

python

1>>> from app import app, db 2>>> with app.app_context(): db.create_all()

投稿2022/12/17 11:47

melian

総合スコア19714

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/12/17 11:48

あらら、被ってしまいましたね。。。
guest

0

たぶん、何か勘違いをしているのだと思います。

質問にある、app.pyはflaskのアプリケーションのソースなので、ここから dbだけを取り出して(from app import db) dbだけ実行しようとしても動きません。
なので、これは正しい動作です。

この作業で何がしたいのか明記していただければ、別のアドバイスが得られるかもしれません。
記載するのであれば、ここではなく、質問を編集してください。

投稿2022/12/17 10:53

TakaiY

総合スコア12747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/12/17 11:02 編集

本日、初めて、python+Flask+SQlite環境を構築し、これから、動作させるとことです。 現在、Flaskは、動いており、127.0.0.1:5000にアクセスすれば、HTMLで記載されている内容は、表示できております。以下の動画を見て行っております。Sqliteの設定手順は、23分~のことを行おうとしております。 https://www.youtube.com/watch?v=mW0_60SRr3s&t=1238s
TakaiY

2022/12/17 11:49

動画をチェックしてみましたが、そのとおりのことをやっていますね。 どうしてそのようにして動くのかちょっとわかりません。 quickquipさんの回答のように動かしているのであれば納得できます。
TakaiY

2022/12/17 11:54

ちなみに、回答にも書いたとおり、そういう情報は質問を編集して書いたほうがいいですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問