【发布时间】:2021-03-12 07:31:36
【问题描述】:
我觉得我犯了一个我无法确定的菜鸟错误。
我有以下文件夹结构
--MyAppRoot\
--app.py
----\models\__init__.py
----\models\models.py
----\models\data_handler.py
----\models\forms.py
----\models\a_few_other_py_files_etc.py
我的 app.py 有通常的 Flask(__name__) 等和 db = SQLAlchemy(app) 初始化。一切正常,来自各种模型 py 文件的所有导入工作正常,通常的东西,如烧瓶形式、wtforms 等。
在我的 data_handler.py 文件中,我正在运行一个利用 Pandas 到 .send_to_sql 的刮板,但是我现在需要导入 db,以便我可以在 db.session.execute(query) 中执行原始 SQL query 以在类中使用,但是当这样做我得到以下错误:
Traceback (most recent call last):
File "C:/Users/me/PythonProjects/MyAppRoot/models/data_handler.py", line 7, in <module>
from app import db
File "C:\Users\me\PythonProjects\MyAppRoot\app.py", line 1, in <module>
from models.forms import (RegisterForm,
ModuleNotFoundError: No module named 'models.forms'; 'models' is not a package
任何帮助表示赞赏。
【问题讨论】:
-
简短回答:
\models\models.py重命名为\some_other_name\models.py -
还建议在考虑应用程序目录结构之前阅读 Flask 应用程序工厂模式和蓝图(在 github 中搜索`flask create_app`)
-
堆栈跟踪显示您可能循环导入
models/xxx需要app也需要app需要models/xxx,我相信ModuleNotFoundError来自不正确的PYTHONPATH。 -
谢谢@madzohan,这是正确的答案。工作得很好,我学会了不要将 py 文件命名为与目录相同的名称。请发布完整答案,我会选择这样。
标签: python flask import sqlalchemy package