Python Flask SQLAlchemy:导入 app.db 到 /models/model.py 失败

Python Flask SQLAlchemy: Import app.db to /models/model.py is failing

我觉得我犯了一个我无法确定的菜鸟错误。

我有以下文件夹结构

--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 的抓取工具,但是我现在需要导入数据库以便我可以执行原始 SQL query in db.session.execute(query) 在 Class 中使用,但这样做时出现以下错误:

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

感谢任何帮助。

问题

虽然 运行ning data_handler.py python 导入系统在同一目录级别 (models.py) 中找到名为 models 的模块。如果名称匹配,它不会通过 PYTHONPATH 进一步查找。

The directory containing the script being run is placed at the beginning of the search path https://docs.python.org/3/tutorial/modules.html#the-module-search-path

How python deals with module and package having the same name?

解决方案 #1


所以你必须重命名包或模块名称\models\models.py才能使导入系统正常工作。

可能的解决方案 #2(不确定)


您可以尝试从 C:/Users/me/PythonProjects/MyAppRoot/ 目录而不是 C:/Users/me/PythonProjects/MyAppRoot/models/ 目录 运行 您的脚本,方法如下:

python -m models.data_handler