每次我运行使用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将跟踪对象的修改并发出信号。这需要额外的内存,如果不需要,可以将其禁用。
如何确定我的项目是否需要,·或者是否可以安全地禁用此功能并在服务器上节省内存?
你的应用程序很可能没有使用Flask-SQLAlchemy事件系统,因此可以安全地关闭它。你需要审核代码以进行验证-你正在寻找与models_committed
或before_models_committed
挂钩的任何内容。如果确实发现你正在使用Flask-SQLAlchemy事件系统,则可能应该更新代码以改为使用SQLAlchemy的内置事件系统。
要关闭Flask-SQLAlchemy事件系统(并禁用警告),只需添加:
SQLALCHEMY_TRACK_MODIFICATIONS = False
更改为你的应用程序配置,直到更改默认设置为止(很有可能在Flask-SQLAlchemy v3中)。
背景-以下是警告告诉你的内容:
Flask-SQLAlchemy有自己的事件通知系统,该系统在SQLAlchemy之上分层。为此,它跟踪对SQLAlchemy会话的修改。这会占用额外的资源,因此该选项SQLALCHEMY_TRACK_MODIFICATIONS允许你禁用修改跟踪系统。当前,该选项默认为True,但将来该默认值将更改为False,从而禁用事件系统。
据我了解,更改的理由有三点:
使用Flask-SQLAlchemy的事件系统的人并不多,但是大多数人没有意识到他们可以通过禁用它来节省系统资源。因此,更明智的默认设置是禁用它,想要它的人可以打开它。
Flask-SQLAlchemy中的事件系统存在相当多的错误(请参阅下面提到的pull请求中与之相关的问题),需要为很少有人使用的功能进行额外的维护。
在v0.7中,SQLAlchemy本身添加了功能强大的事件系统,其中包括创建自定义事件的功能。理想情况下,Flask-SQLAlchemy事件系统除了创建一些自定义SQLAlchemy事件钩子和侦听器外,无所不用其事,然后让SQLAlchemy自己管理事件触发器。
(我已经删除了上一个,所以我想你可以在编辑中找到它) 编辑 所以按照bad_coder在评论中告诉的以及他分享的链接中的大多数答案,我点击了“选项显示所有”,我得到了这个 1) 这里唯一有意义的是点击“”按钮,所以我点击了它 2) 现在我应该用路径替换突出显示的部分(换句话说,我在cmd中键入“where python”后得到的路径) 3) 这就是我发现的。那么我应该在突出显示的部分复制并粘贴哪一
问题内容: 我想知道我是否在通话。 如果我正在通话,请启动服务(服务部分已清除)。我该怎么做呢? 参加通话时,我需要致电服务中心…我不知道该怎么做?有什么帮助吗? 问题答案: 您需要广播接收器… 在清单中声明广播接收器… 还声明使用权限… 广播接收器类… 还有一类可自定义电话状态侦听器…
问题内容: 是否可以 不 尝试加载就知道是否已加载Java类?尝试加载该类,但我不希望出现这种副作用。还有另一种方法吗? (我不想覆盖类加载器。我正在寻找一个相对简单的方法。) 问题答案: (感谢Aleksi)此代码: 产生: 请注意,示例类不在软件包中。完整的二进制名称是必需的。 二进制名称的一个示例是
问题内容: 例如,Facebook.com是否可以在浏览器上运行版本控制脚本,并确定我是否正在使用脚本运行更改的HTML代码? 可以使用一个脚本来完成此操作,该脚本可以读取缓存中的HTML代码并生成某种哈希标签,然后将该哈希标签发送回服务器,并与发送给客户端的代码进行比较吗? 问题答案: 是的,从理论上讲,站点可以推断出各种情况下脚本的存在。 这不是万无一失的,通常对于站点的可忽略的“威胁”来说是
问题内容: 我有一个表格,基本上是上传一个文件。我要提交两次表格,第1次不包含多部分,第二次1次包含多部分。 但是我想先检查一下第一次提交表单是否成功,然后再进行第二次提交 引用@Vern后编辑 这是我的servlet部分。我在哪里确定它是否由多个部分组成。如果未将 resultType 存储到会话变量中,则返回, 现在,我要检查此“已 提交 ”或类似内容,然后第二次提交表格。 第二表单提交:在这
问题内容: 即使文件在远程http服务器上不存在,它也会以静默方式返回,它只是将html页面保存到命名文件中。例如: 即使abc.jpg在google.com服务器上不存在,它只是默默返回,生成的不是有效的jpg文件,它实际上是html页面。我猜返回的标头(一个httplib.HTTPMessage实例)可以用来实际上告诉检索是否成功,但是我找不到的任何文档。 有人可以提供有关此问题的一些信息吗?