[解決済み】SQLALCHEMY_TRACK_MODIFICATIONSを無効にする方法は?
質問事項
Flask-SQLAlchemyを使用したアプリを実行するたびに、以下のような警告が表示されます。
SQLALCHEMY_TRACK_MODIFICATIONS
オプションは無効になります。
/home/david/.virtualenvs/flask-sqlalchemy/lib/python3.5/site-packages/flask_sqlalchemy/__init__.py:800: UserWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True to suppress this warning.
warnings.warn('SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True to suppress this warning.')
このオプションが何をするのか調べようとしましたが、Flask-SQLAlchemyのドキュメントでは、このトラッキングが何に使われるのかが明確ではありません。
SQLALCHEMY_TRACK_MODIFICATIONS
True に設定すると(デフォルト)、Flask-SQLAlchemy はオブジェクトの変更を追跡し、シグナルを出します。これは余分なメモリを必要とするので、必要なければ無効にすることができます。
自分のプロジェクトに
SQLALCHEMY_TRACK_MODIFICATIONS = True
それとも、この機能を安全に無効化して、サーバーのメモリを節約することができますか?
解決方法は?
おそらく、あなたのアプリケーションは Flask-SQLAlchemy のイベントシステムを使用していないので、オフにしても大丈夫でしょう。コードを監査して確認する必要があります。
models_committed
または
before_models_committed
. もし Flask-SQLAlchemy のイベントシステムを使っていることがわかったら、おそらくコードを更新して、代わりに SQLAlchemy の組み込みイベントシステムを使うようにすべきです。
Flask-SQLAlchemy 2.1時点のデフォルト値は
None
というファルシーな値なので、イベントシステムの
は無効です。
. 古いバージョンでは、デフォルト値は
True
そのため、明示的に無効化する必要があります。
しかし、どちらの場合も、これを明示的に
False
. そのためには、次のように付け加えます。
SQLALCHEMY_TRACK_MODIFICATIONS = False
をアプリの設定に追加します。
背景--これが警告の内容です。
Flask-SQLAlchemy は独自のイベント通知システムを持っており、SQLAlchemy の上に重ねることができます。そのために、SQLAlchemy のセッションに対する変更を追跡します。これには余分なリソースがかかるので、オプション
SQLALCHEMY_TRACK_MODIFICATIONS
を使用すると、変更追跡システムを無効にすることができます。
変更の根拠は3つあります。
-
Flask-SQLAlchemy のイベントシステムを使う人はそれほど多くありませんが、ほとんどの人はそれを無効にすることでシステムリソースを節約できることに気づいていません。だから、より健全なデフォルトは、それを無効にして、必要な人がそれをオンにすることです。
-
Flask-SQLAlchemy のイベントシステムはかなりバグが多く(後述のプルリクエストにリンクされている問題を参照)、使う人が少ない機能に対して追加のメンテナンスが必要です。
-
v0.7では、SQLAlchemy自体に 強力なイベントシステム カスタムイベントを作成する機能も含まれています。Flask-SQLAlchemy イベントシステムは、いくつかのカスタム SQLAlchemy イベントフックとリスナーを作成し、 SQLAlchemy 自身にイベントのトリガーを管理させることだけが理想的です。
のあたりのディスカッションで詳しく見ることができます。 この警告を発生させるようになったプルリクエスト .
関連
-
Pythonコンテナのための組み込み汎用関数操作
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] Windowsにpipをインストールするにはどうしたらいいですか?
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
python implement mysql add delete check change サンプルコード
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】Flaskのテンプレートが見つからない【重複あり