为什么我得到一个flask weakref错误时,从子模块导入我的SQLAlchemy数据库?



我目前有一个flask项目设置如下(我在这里做了一些修改,试图得到最小的工作示例,所以其中一些可能会稍微改变)

from extensions import db
def create_api():
# Create API app
api = Flask(__name__)
# Configure... the configs
api.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get("DB_URL", "default")
# Register information to run api
register_extensions(api)
register_models(api)
register_urls(api)
# Return the api object
return api
create_api().run()

我的寄存器扩展和寄存器模型方法如下:

def register_models(api):
with api.app_context():
db.create_all()

def register_extensions(api):
db.init_app(api)
bcrypt.init_app(api)

扩展模块:

from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
# Establish SQLAlchemy Database extension
db = SQLAlchemy()
# Establish Bcrypt extension for hashing passwords
bcrypt = Bcrypt()

项目目录类似于

-FSBS
-API
- __init__.py
- app.py
- extensions.py
- routes.py

像这样一切都很好。但是,如果我更改app.py中的导入from extensions import dbfrom FSBS.API.extensions import db,我所有的尝试使用db开始抛出"KeyError:"

这有点问题,因为我想开始重构我的路由到一个子文件夹,其中我fromFSBS.API.extensions import db.

不仅如此,而且我不明白为什么这有什么不同,所以任何关于解决这个小难题的建议都将是非常感谢的。

我最近在尝试将路由放入子模块时遇到了完全相同的问题。

我无法解释为什么会发生这种情况,但据我所知,这与Flask-SQLAlchemy版本有关——我最初尝试运行3.0.2版本。

为我解决问题的是降级到2.5.1版本