繁体   English   中英

Flask 和 Flask_SQLAlchemy 中的循环导入错误

[英]Circular Import Error in Flask and Flask_SQLAlchemy

我的文件夹结构看起来像 -结构

我正在尝试以模块化方式编写代码,但遇到循环导入。 我正在研究 ORM 模型和 Flask 中的基本登录/注册用户场景。

我的代码看起来像 -

*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)

我认为app/__init__.py from app import routes的行是问题所在。 因为在你的app/__init__.py文件的初始化过程中,你实际上从__init__文件本身导入了routes ,这将不起作用

但更一般地说,我认为创建 Flask 应用程序并将其他全局对象放入__init__.py文件是非常规的。 通常__init__.py文件用于为包中的模块提供替代名称,而不是用于保存全局对象。

更好的是将这些东西存储在一个名为app.py或其他东西的模块中,这样它们就不会在每次调用from app import foofrom app import foo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM