flask 集成 sqlalchemy一个常见的错误和解决方案

错误一的情况:: RuntimeError

No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.

File "D:\GOpath\src\kirinproject\workspace_yushunet_python\main.py", line 6, in <module> db.create_all()

错误一的原因分析:

调用db.create_all() 函数创建所有数据库表的时候,必须传一个参数:db.create_all(app=app),app是你创建的flask对象,因为在flask源代码中,

db.init_app(app)这种挂载方式 并没有把app对象保存在SQLalchemy中,所有自己传入进去即可!

错误二的情况:OSError: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。

错误二的原因分析:

vscode-flask调试端口:(修改对应端口,80、5000....这些常用端口很可能被占用)

flask自带debug的端口则修改app.run(debug=app.config['DEBUG'],host=app.config['HOST'],port=app.config['PORT'])

错误三的情况:C:\Users\lenovo\.virtualenvs\workspace_yushunet_python-5Y0jhM6o\lib\site-packages\flask_sqlalchemy\__init__.py:774: UserWarning: Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. Defaulting SQLALCHEMY_DATABASE_URI to "sqlite:///:memory:".
  'Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. '

C:\Users\lenovo\.virtualenvs\workspace_yushunet_python-5Y0jhM6o\lib\site-packages\flask_sqlalchemy\__init__.py:794: FSADeprecationWarning: 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.
  'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '

错误三原因分析:

第一步:检查是否配置数据库链接路径

#这里的配置数据库链接参数

SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:password@localhost:3306/kirin_yushu"


#如果设置为True,Flask-SQLAlchemy将跟踪对象的修改并发出信号。
#默认设置为None,启用跟踪,但会发出警告,默认情况下将来会被禁用。
#这需要额外的内存,如果不需要应该禁用。

SQLALCHEMY_TRACK_MODIFICATIONS = False

第二步:(检查顺序是否错了)读取 SQLALCHEMY_DATABASE_URI配置是否在db挂在到APP之前

扫描二维码关注公众号,回复: 5116450 查看本文章

错误顺序如下:

from kirin_app import app
from kirin_app.database.db_book import db

#这里是错误的顺序!!

#db数据库挂在到app对象上
db.init_app(app)
db.create_all(app=app)

# 导入settings.文件会获得一个app.config字典
# 配置普通的公开的信息的配置文件
app.config.from_object("kirin_app.config.settings")
#配置私有不能公开的信息的配置文件
app.config.from_object("kirin_app.config.secure")

正确顺序如下: 

from kirin_app import app
from kirin_app.database.db_book import db

#正确的数据库路径和db挂在APP的执行顺序

# 导入settings.文件会获得一个app.config字典
# 配置普通的公开的信息的配置文件
app.config.from_object("kirin_app.config.settings")
#配置私有不能公开的信息的配置文件
app.config.from_object("kirin_app.config.secure")

#db挂在到APP之前,必须配置app.config中的SQLALCHEMY_DATABASE_URI路径

#db数据库挂在到app对象上
db.init_app(app)
db.create_all(app=app)

# 开启flask自带的服务器
if __name__ == '__main__':
    app.run(
        debug=app.config['DEBUG'],
        host=app.config['HOST'],
        port=app.config['PORT'])

猜你喜欢

转载自blog.csdn.net/weixin_43343144/article/details/86620262