如何解决Flask和Flask_SQLAlchemy中的循环导入错误
我的文件夹结构看起来像- Structure
我试图以模块化的方式编写代码,但遇到循环导入。 我正在烧瓶中研究ORM模型和基本的登录/注册用户方案。
我的代码如下-
*app/__init__.py*
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "..."
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
db.create_all()
from app import routes
def get_session():
return db.session()
crud / crud_user.py
from app.model import User
from app import get_session
from flask_sqlalchemy import SQLAlchemy
session = get_session()
def save_user_detail(user: User):
# make use of session here
pass
错误-
$ python runserver.py
Traceback (most recent call last):
File "runserver.py",line 1,in <module>
from app import app
File "C:\Users\admin\Documents\Projects\Modular\server-side\app\__init__.py",line 13,in <module>
from app import routes
File "C:\Users\admin\Documents\Projects\Modular\server-side\app\routes.py",line 4,in <module>
from crud.crud_user import get_user,save_user_detail
File "C:\Users\admin\Documents\Projects\Modular\server-side\crud\crud_user.py",line 2,in <module>
from app import get_session
ImportError: cannot import name 'get_session' from partially initialized module 'app' (most likely due to a circular import)
解决方法
我认为from app import routes
中的app/__init__.py
行是问题所在。因为在app/__init__.py
文件初始化期间,您实际上是从该routes
文件本身导入__init__
的,所以
但是,更一般地说,我相信创建Flask应用并将其他全局对象放入__init__.py
文件中是非常规的。通常,__init__.py
文件用于为包中的模块提供备用名称,而不用于保存全局对象。
更好的做法是将这些内容存储在名为app.py
的模块中,这样就不会在每次调用from app import foo
时将它们导入
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。