在同一个项目中由于flask_sqlalchemy版本不同,有时会报如下错误

错误信息如下:

flask_sqlalchemy\__init__.py:: 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.')

错误信息提示的很明确,修改 SQLALCHEMY_TRACK_MODIFICATIONS 为True以移除这个警告。

去flask/lib/python2.7/site-packages/flask_sqlalchemy的init.py里面修改吧。

在init.py里面有init_app方法,修改下面的一行:

track_modifications = app.config.setdefault['SQLALCHEMY_TRACK_MODIFICATIONS', True]

然后保存,运行。

注意

在后面程序中仍然出现错误

>>> from app import db,models
>>> u = models.User(nickname='john', email='john@email.com')
>>> db.session.add(u)
Traceback (most recent call last):
File "<stdin>", line , in <module>
File "/Users/simufengyun/microblog/flask/lib/python2.7/site-packages/sqlalchemy/orm/scoping.py", line , in do
return getattr(self.registry(), name)(*args, **kwargs)
File "/Users/simufengyun/microblog/flask/lib/python2.7/site-packages/sqlalchemy/util/_collections.py", line , in __call__
return self.registry.setdefault(key, self.createfunc())
File "/Users/simufengyun/microblog/flask/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line , in __call__
return self.class_(**local_kw)
File "/Users/simufengyun/microblog/flask/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line , in __init__
#track_modifications = app.config['SQLALCHEMY_TRACK_MODIFICATIONS']
KeyError: ('SQLALCHEMY_TRACK_MODIFICATIONS', True)

图示如下

请参考如下文章进行修改:https://github.com/pallets/flask-sqlalchemy/issues/609

关于KeyError的错误:'SQLALCHEMY_TRACK_MODIFICATIONS'。

# __init__.py
class SignallingSession(SessionBase): def __init__(self, db, autocommit=False, autoflush=True, **options):
#: The application that this session belongs to.
self.app = app = db.get_app()
track_modifications = app.config['SQLALCHEMY_TRACK_MODIFICATIONS']
bind = options.pop('bind', None) or db.engine
binds = options.pop('binds', db.get_binds(app)) if track_modifications is None or track_modifications:
_SessionSignalEvents.register(self) SessionBase.__init__(
self, autocommit=autocommit, autoflush=autoflush,
bind=bind, binds=binds, **options
)
关键字“SQLALCHEMY_TRACK_MODIFICATIONS”不在app.config中,app.config在使用前未初始化。所以我建议稍微改变如下: 刚刚在“self.session = self.create_scoped_session(session_options)”之前初始化了“self.app = app”。
# __init__.py
class SQLAlchemy(object):
"""This class is used to control the SQLAlchemy integration to one
or more Flask applications. Depending on how you initialize the
object it is usable right away or will attach as needed to a
Flask application.
... ... ...
.. versionchanged:: 3.0
Utilise the same query class across `session`, `Model.query` and `Query`.
""" #: Default query class used by :attr:`Model.query` and other queries.
#: Customize this by passing ``query_class`` to :func:`SQLAlchemy`.
#: Defaults to :class:`BaseQuery`.
Query = None def __init__(self, app=None, use_native_unicode=True, session_options=None,
metadata=None, query_class=BaseQuery, model_class=Model):
self.app = app
self.use_native_unicode = use_native_unicode
self.Query = query_class
self.session = self.create_scoped_session(session_options)
self.Model = self.make_declarative_base(model_class, metadata)
self._engine_lock = Lock()
# self.app = app _include_sqlalchemy(self, query_class) if app is not None:
self.init_app(app)
添加代码:
if self.app is not None:
return self.app
代码之前: if current_app:
return current_app._get_current_object()
如下: # __init__.py def get_app(self, reference_app=None):
"""Helper method that implements the logic to look up an
application.""" if reference_app is not None:
return reference_app if self.app is not None:
return self.app if current_app:
return current_app._get_current_object() # if self.app is not None:
# return self.app raise RuntimeError(
'No application found. Either work inside a view function or push'
' an application context. See'
' http://flask-sqlalchemy.pocoo.org/contexts/.'
)
这样,“self.app = app = db.get_app()”将返回实例参数“app”通过“SQLAlchemy(app)”传输,而不是引发错误。 因为,代码中的“self.app” if self.app is not None:
return self.app
不会是None,也不会出错。 现在我们可以在使用“db = SQLAlchemy(app)”作为下面的代码之前初始化“app.config”: #coding:utf8
import pymysql
from flask_sqlalchemy import SQLAlchemy
from flask import Flask app = Flask(__name__) app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:whm@47.x.x.x:3306/artcs_pro"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True db = SQLAlchemy(app)

注意以上所有修改操作都要重新启动 flask/bin/python

Flask报如下错误:SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning.的更多相关文章

  1. 解决'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '

    懒癌晚期,直接贴图 然后就解决了!

  2. SQLALCHEMY_TRACK_MODIFICATIONS adds significant异常的解决方法

  3. LR报-27727错误解决办法

    1.报如下错误:Action.c(4):Error-27727:Step download timeout(120 seconds) has expired when downloading reso ...

  4. Flask報錯 KeyError 'SQLALCHEMY_TRACK_MODIFICATIONS'.md

    KeyError: 'SQLALCHEMY_TRACK_MODIFICATIONS' 关于flask-sqlalchemy中出现的 KeyError: 'SQLALCHEMY_TRACK_MODIFI ...

  5. Python Flask UnicodeDecodeError 编码错误解决

    折腾Python做快速Web开发.最后定下来用Flask,相对教程全面. utf8编码上遇到问题,所有文件已经是utf8编码保存,加载css.js等静态文件,如果用GBK编码就正常:用utf8就报Un ...

  6. WinServer2008R2 + IIS 7.5 + .NET4.0 经典模式 运行WebAPI程序报404错误的解决方案

    在Windows Server 2008 R2系统下,IIS 7.5 + .NET Framework 4.0的运行环境,以经典模式(Classic Mode)部署一个用.NET 4.0编译的 Web ...

  7. 启动mysql服务 报1067 错误

    启动mysql 报1067 错误         一般报1067错误,先看一下data/my.ini配置文件 中的路径 datadir ,log-bin ,log-error 报1067错误原因 多种 ...

  8. MVC中使用jquery uploadify上传图片报302错误

    使用jquery uploadify上传图片报302错误研究了半天,发现我上传的action中有根据session判断用户是否登录,如果没有登录就跳到登陆页,所以就出现了302跳转错误.原来更新了fl ...

  9. 开机报这个错误,然后 adobe软件无法使用

    开机报这个错误,然后 adobe软件无法使用 按照此方法测试,无效,在原基础如下更改   /tmp 是连接文件找到根文件(/private/tmp)删除重新给予权限,重新建立连接恢复正常 使用到的命令 ...

随机推荐

  1. mysql如何处理高并发(转)

    mysql高并发的解决方法有:优化SQL语句,优化数据库字段,加缓存,分区表,读写分离以及垂直拆分,解耦模块,水平切分等. 高并发大多的瓶颈在后台,在存储mysql的正常的优化方案如下: (1)代码中 ...

  2. 做了这么久的程序员,你知道为什么会有 Lambda 表达式吗?

    Java8 有一些新的特性,今天老顾给大家分享一下关于 Lambda 表达式的由来,一开始感觉 Lambda 可读性蛮差的,不知道 为什么 Java8 会出来这个表达式?既然大佬们推出来,肯定是有原因 ...

  3. MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束

    最近在使用MyBatis操作Oracle数据库的时候,进行批量插入数据,思路是封装一个List集合通过Myabtis 的foreach标签进行循环插入,可是搬照Mysql的批量插入会产生 异常 ### ...

  4. [WPF 自定义控件]自定义控件库系列文章

    Kino.Toolkit.Wpf Kino.Toolkit.Wpf是一组简单实用的WPF控件与工具,用于介绍自定义控件的入门.相关博客地址如下: 开始一个自定义控件库项目 介绍开始一个自定义控件库项目 ...

  5. alpine制作jdk、jre镜像、自定义镜像上传阿里云

    alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBo ...

  6. Python如何运行程序

    人生苦短,我用Python. 作为一个开发人员,如何写代码是必须要知道的,代码如何运行也是有必要了解的.通过了解代码如何运行,可指导我们写出效率更高的代码.下午看了<Python学习手册> ...

  7. arcgis api 4.x for js 结合 Echarts4 实现统计图(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类 ...

  8. arcgis api for javascript 学习(七) 调用发布地图信息,并将地图属性信息输出到Excel表格---进阶版

    我们在arcgis api for javascript 学习(三)已经学习到了关于调用地图信息进行属性输出的问题,不过通过代码我们实现后会发现还是有一些小瑕疵的,比如我们只能单个数据属性的输出,如果 ...

  9. TCP安全,SYN Flooding 和 nmap

    目录 SYN flooding nmap nmap idle SYN flooding 简介:向target持续发送SYN=1的TCP报文,使target因内存满而拒绝服务. 命令:netwox 76 ...

  10. SQL索引碎片的产生,处理过程。

    本文参考 https://www.cnblogs.com/CareySon/archive/2011/12/22/2297568.html https://www.jb51.net/softjc/12 ...