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

错误顺序如下:

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值