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

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

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

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

Python 3.x

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

SQLAlchemy

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

Q&A

解決済

1回答

9873閲覧

db.init_appの初期化処理の処理の流れ、及び仕組みについて

sequelanonymous

総合スコア123

Flask

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

Python 3.x

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

SQLAlchemy

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

0グッド

0クリップ

投稿2019/02/19 04:29

編集2019/02/19 04:29

一回目の起動時のみにテーブル作成及びデフォルト値のデータ挿入を実行させるように書きたいです。
下記は、サンプルですが、db.init_appの関数定義がなく、どう書くものでしょうか?db.init_app(app)の意味が気になっています。なぜ、わざわざcreate_app関数を定義してappをreturnさせて別で呼び出す必要があるのでしょうか?そもそも、これを初期化処理と読んでいいものでしょうか?

初期化処理は、だれもが書くような内容だと思うのでflaskでかかれたサンプルをご存知でしたら教えていただけると助かります。

run.py

from app import create_app if __name__ == "__main__": app = create_app() app.run()

app/init.py

from flask import Flask from flask_debugtoolbar import DebugToolbarExtension from flask.ext.sqlalchemy import SQLAlchemy # Import SQLAlchemy from flask.ext.mongoengine import MongoEngine # Import Mongoengine from flask.ext.admin import Admin from app import config # app setup db = SQLAlchemy() mongodb = MongoEngine() admin = Admin() toolbar = DebugToolbarExtension() def create_app(): app = Flask() app.config.config_from_object(config) #Initializing db.init_app(app) mongodb.init_app(app) admin.init_app(app) toolbar.init_app(app) # Import a module from app.module1.controllers import mod_app # Register blueprint(s) app.register_blueprint(mod_app) # Build the database: # This will create the database file using SQLAlchemy db.create_all() return app

引用元:
https://qiita.com/divider_kuro/items/c74514af9ea89f1b9793

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

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

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

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

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

guest

回答1

0

ベストアンサー

主に設定 app.config を操作しているみたいですね。
自分も気になっていたので、該当のソースコードを引っ張ってきました。

flask.ext.sqlalchemy は deprecated

ちなみに flask.ext.sqlalchemy は deprecated とのことで、別の箇所から引っ張っています。

Importing flask.ext.sqlalchemy is deprecated, use flask_sqlalchemy instead.

flask.ext.sqlalchemyのインポートは非推奨です。代わりにflask_sqlalchemyを使用してください。

だそうです。(エラーではなくて Warning=警告 ですね)

flaskの勉強をしていたらこういったエラーに出会いましたが、どういう内容かわかりますか?

ソースコード

python

1class SQLAlchemy(object): 2 3 ... 4 5 def init_app(self, app): 6 """This callback can be used to initialize an application for the 7 use with this database setup. Never use a database in the context 8 of an application not initialized that way or connections will 9 leak. 10 11 (だいぶ意訳) 12 この関数を使えば、 13 このデータベースのセットアップするために、アプリケーションを初期化することができます。 14 アプリケーションコンテキストの中でデータベースを使わなかった場合、 15 データベース接続が漏れてしまいます。 16 """ 17 if ( 18 'SQLALCHEMY_DATABASE_URI' not in app.config and 19 'SQLALCHEMY_BINDS' not in app.config 20 ): 21 warnings.warn( 22 'Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. ' 23 'Defaulting SQLALCHEMY_DATABASE_URI to "sqlite:///:memory:".' 24 ) 25 26 app.config.setdefault('SQLALCHEMY_DATABASE_URI', 'sqlite:///:memory:') 27 app.config.setdefault('SQLALCHEMY_BINDS', None) 28 app.config.setdefault('SQLALCHEMY_NATIVE_UNICODE', None) 29 app.config.setdefault('SQLALCHEMY_ECHO', False) 30 app.config.setdefault('SQLALCHEMY_RECORD_QUERIES', None) 31 app.config.setdefault('SQLALCHEMY_POOL_SIZE', None) 32 app.config.setdefault('SQLALCHEMY_POOL_TIMEOUT', None) 33 app.config.setdefault('SQLALCHEMY_POOL_RECYCLE', None) 34 app.config.setdefault('SQLALCHEMY_MAX_OVERFLOW', None) 35 app.config.setdefault('SQLALCHEMY_COMMIT_ON_TEARDOWN', False) 36 track_modifications = app.config.setdefault( 37 'SQLALCHEMY_TRACK_MODIFICATIONS', None 38 ) 39 40 if track_modifications is None: 41 warnings.warn(FSADeprecationWarning( 42 'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and ' 43 'will be disabled by default in the future. Set it to True ' 44 'or False to suppress this warning.' 45 )) 46 47 app.extensions['sqlalchemy'] = _SQLAlchemyState(self) 48 49 @app.teardown_appcontext 50 def shutdown_session(response_or_exc): 51 if app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']: 52 if response_or_exc is None: 53 self.session.commit() 54 55 self.session.remove() 56 return response_or_exc

投稿2019/03/01 09:00

編集2019/03/01 09:07
nico25

総合スコア830

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問