我如何知道是否可以禁用SQLALCHEMY_TRACK_MODIFICATIONS?

问题描述

你的应用程序很可能没有使用Flask-sqlAlchemy事件系统,因此可以安全地关闭它。你需要审核代码以进行验证-你正在寻找与models_committedbefore_models_committed挂钩的任何内容。如果确实发现你正在使用Flask-sqlAlchemy事件系统,则可能应该更新代码以改为使用sqlAlchemy的内置事件系统。

关闭Flask-sqlAlchemy事件系统(并禁用警告),只需添加

sqlALCHEMY_TRACK_MODIFICATIONS = False

更改为你的应用程序配置,直到更改默认设置为止(很有可能在Flask-sqlAlchemy v3中)。

背景-以下是警告告诉你的内容

Flask-sqlAlchemy有自己的事件通知系统,该系统在sqlAlchemy之上分层。为此,它跟踪对sqlAlchemy会话的修改。这会占用额外的资源,因此该选项sqlALCHEMY_TRACK_MODIFICATIONS允许你禁用修改跟踪系统。当前,该选项默认为True,但将来该默认值将更改为False,从而禁用事件系统。

据我了解,更改的理由有三点:

  1. 使用Flask-sqlAlchemy的事件系统的人并不多,但是大多数人没有意识到他们可以通过禁用它来节省系统资源。因此,更明智的默认设置是禁用它,想要它的人可以打开它。

  2. Flask-sqlAlchemy中的事件系统存在相当多的错误(请参阅下面提到的pull请求中与之相关的问题),需要为很少有人使用的功能进行额外的维护。

  3. 在v0.7中,sqlAlchemy本身添加功能强大的事件系统,其中包括创建自定义事件的功能。理想情况下,Flask-sqlAlchemy事件系统除了创建一些自定义sqlAlchemy事件钩子和侦听器外,无所不用其事,然后让sqlAlchemy自己管理事件触发器。

解决方法

每次我运行使用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文档尚不清楚该跟踪的用途。

·

如果设置为True(默认值),Flask-SQLAlchemy将跟踪对象的修改并发出信号。这需要额外的内存,如果不需要,可以将其禁用。

如何确定我的项目是否需要,·或者是否可以安全地禁用此功能并在服务器上节省内存?

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”