Flask-SQLAlchemy 模块化使用时如何避免“nexpect System Error – The setup method ‘shell_context_processor’ can no longer be called on the application”错误?

flask-sqlalchemy 模块化使用时如何避免“nexpect system error - the setup method 'shell_context_processor' can no longer be called on the application”错误?

flask-sqlalchemy 放在模块中使用的问题

官方文档中的例子是将数据库初始化代码放在 app.py 中,但实际项目中通常会将这些代码放在单独的模块中。在这样的情况下,将模块引入后可能会出现以下错误:

nexpect system error - the setup method 'shell_context_processor' can no longer be called on the application. it has already handled its first request, any changes will not be applied consistently.make sure all imports, decorators, functions, etc. needed to set up the application are done before running it.

登录后复制

这个错误表明 current_app 中的数据库设置已经完成,接下来引入的代码无法再对其进行修改。解决方法是在外部模块中使用自己的 app 对象,而不是使用 current_app。

首先,在外部模块 a.py 中初始化数据库:

from flask import flaskfrom flask_sqlalchemy import sqlalchemyapp = flask(__name__)setting = app.config["database"]app.config["sqlalchemy_database_uri"] = f'mysql+pymysql://{setting["db_user"]}:{setting["db_pass"]}@{setting["db_host"]}/{setting["db_name"]}'db = sqlalchemy(app)

登录后复制

然后,在使用数据库的模块 b.py 中,引入 a.py 中的数据库对象:

from a import DBclass Account:    @staticmethod    def login(username, password):        user = DB.session.execute(DB.select(User).filter_by(name=username)).scalar_one()        return "token"

登录后复制

这样,在外部模块中也可以顺利使用数据库。

以上就是Flask-SQLAlchemy 模块化使用时如何避免“nexpect System Error – The setup method ‘shell_context_processor’ can no longer be called on the application”错误?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2180160.html

(0)
上一篇 2025年2月25日 14:24:39
下一篇 2025年2月25日 14:24:54

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论