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

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

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

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

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

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2542閲覧

【Flask】MySQLに接続し、テーブルを作成しようとすると、RuntimeErrorが出ます。

退会済みユーザー

退会済みユーザー

総合スコア0

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

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

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/01/15 11:10

編集2022/01/15 11:37

Flaskでのアプリケーションの作成は初めてですが、MySQLに接続し、テーブルの作成を行いたく、Flask-SQLAlchemyでモデルを別々のファイルに分割しようと考えております。

実行すると、下記エラーが吐かれてしまいます。

RuntimeError: No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.

階層構造

skip/
├ app.py
├ database.py
├ config.py
├ views/
| └ skip_view.py
└ models/
| └ user.py

環境

・CentOS7
・Python3.6
・Flask2.0.2
・Flask-SQLAlchemy2.5.1

発生しているエラーログ

Traceback (most recent call last): File "/var/www/skip/app.py", line 2, in <module> from views import skip_view File "./views/skip_view.py", line 3, in <module> from models.user import User File "./models/user.py", line 1, in <module> from database import db File "./database.py", line 1, in <module> from flask_sqlalchemy import SQLAlchemy ModuleNotFoundError: No module named 'flask_sqlalchemy'

該当するソースコード

app.py

1from flask import Flask 2from views import skip_view 3from database import db 4import config 5 6def create_app(): 7 app = Flask(__name__) 8 9 # DB設定を読み込む 10 app.config.from_object('config.Config') 11 db.init_app(app) 12 13 app.register_blueprint(skip_view.app) 14 return app 15 16app = create_app() 17 18if __name__ == "__main__": 19 app.run()

database.py

1from flask_sqlalchemy import SQLAlchemy 2 3# FlaskがSQLAlchemyを使えるように初期化 4db = SQLAlchemy() 5 6def init_db(app): 7 db.init_app(app)

config.py

1class SystemConfig: 2 # DBの接続情報を設定 3 SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{user}:{password}@{host}/{db_name}?charset=utf8'.format(**{ 4 'user': 'xxxx', 5 'password': 'xxxxxxxx', 6 'host': '127.0.0.1', 7 'db_name': 'xxxx' 8 }) 9 10Config = SystemConfig

views/skip_view.py

1from flask import Blueprint, render_template 2from models.user import User 3 4# Blueprintのオブジェクトを生成する 5app = Blueprint('views', __name__) 6 7@app.route('/login', methods=['GET','POST']) 8def login(): 9 title = "ログイン" 10 return render_template('login.html', title=title)

models/user.py

1from database import db 2 3class User(db.Model): 4 __tablename__ = 'users' 5 id = db.Column(db.Integer, primary_key=True) 6 nickname = db.Column(db.String(30), unique=True, nullable=True) 7 email = db.Column(db.String(300), unique=True, nullable=True) 8 password = db.Column(db.Text, nullable=True) 9 first_name = db.Column(db.String(30), nullable=True) 10 last_name = db.Column(db.String(30), nullable=True) 11 12db.create_all()

同様のエラーが無いか探してみたところ、テーブルを作成する際に、アプリケーションコンテキストをプッシュするために、「with app.app_context()」を使用するという記事を見たのですが、上手くいかずという状況です。
エラー文からflask_sqlalchemyが読み込まれていないことが原因だと思うのですが、参考にしているサイトでは、上記のコードで記載されていたので、何が原因なのかが分かりませんでした。

何か原因が分かる方がいらっしゃいましたら、ご教授頂けますと幸いです。
その他に必要な情報がありましたら提示いたします。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

最初のデータベースを作るには、対話的な Python シェルから db オブジェクトをインポートして、 SQLAlchemy.create_all() メソッドを実行して、テーブルとデータベースを作成するだけです。

py

1>>> from yourapplication import db 2>>> db.create_all()

https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/

user.pyの中でdb.create_all()するのではなく($ flask runではなく)、対話的なPythonシェルから実行するのではないでしょうか。
db.init_app(app)したdbが使えているのか怪しい気もします・・

どうしたいのかわからないところもありますので、「参考にしているサイト」のリンクもご記載いただいた方が早いかもしれません。


追記です。

(dbはターミナルからMySQLにログインし「create database」にて直接作成しました。)

データベース自体もSQLAlchemyが作ってくれる印象ですが、先に作成されていたのですね。

ご記載いただいたページの中で「参考」として挙げられている、次のページの内容も見ておいた方が良い印象です。
(こちらの方が構成が素直に解釈できるような気がします)
https://qiita.com/shirakiya/items/0114d51e9c189658002e

その前に、Flask-SQLAlchemyの動きを理解するために、Quickstartか@ITの「最小限のFlask-SQLAlchemyアプリ」のページを試してみると良いかもしれません。
https://atmarkit.itmedia.co.jp/ait/articles/1808/07/news029.html
https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/

投稿2022/01/15 14:54

編集2022/01/16 02:18
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2022/01/15 15:41

ご回答頂きありがとうございます。 最初のdbはpythonシェルから実行して作成するのですね。。! > db.init_app(app)したdbが使えているのか怪しい気もします・・ なるほどですね。。ありがとうございます。 > どうしたいのかわからないところもありますので、 説明等が明確になっておらず、失礼いたしました。 ひとまず、MySQLへの接続と、userテーブルの作成を考えております。 (dbはターミナルからMySQLにログインし「create database」にて直接作成しました。) コードは主に下記を参考に実装いたしました。 https://qiita.com/nanaco/items/f22f67e2a50fab64c937
退会済みユーザー

退会済みユーザー

2022/01/16 05:01

xg63ex2b様 ご確認、ご回答頂きありがとうございます! >ご記載いただいたページの中で「参考」として挙げられている、次のページの内容も見ておいた方が良い印象です。 こちら拝見させていただきました。 確かにこちらの記事の方が何を行なっているのか理解でき、無事テーブルの作成も行えました。 > その前に、Flask-SQLAlchemyの動きを理解するために こちらも時間のある際に確認してみたいと思います。 大変助かりました。。!本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.42%

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

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

質問する

関連した質問