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

转载:https://www.dandelioncloud.cn/article/details/1438996204599447554

错误一的情况:

: 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 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之前

错误顺序如下:

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'])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值