Flask项目相对导入失效及数据库生成位置异常问题求助
问题排查与解决
1. 数据库文件生成位置错误的解决
你当前的DB_NAME仅使用文件名,SQLAlchemy会以当前运行脚本的工作目录为基准生成文件。由于你运行的是项目根目录下的main.py,数据库会生成在根目录而非website文件夹内。
修改__init__.py里的数据库路径配置,用path模块拼接website目录的绝对路径:
from flask import Flask from flask_sqlalchemy import SQLAlchemy from os import path db = SQLAlchemy() # 获取当前文件(__init__.py)所在的目录路径 BASE_DIR = path.dirname(path.abspath(__file__)) DB_NAME = 'database.db' # 拼接出数据库文件的完整路径 DB_PATH = path.join(BASE_DIR, DB_NAME) def create_app(): # 注意修正函数名拼写:creat_app → create_app app = Flask(__name__) app.config['SECRET_KEY'] = "80aa3b5fb3563a688d51e6349d599f78" # 使用拼接好的完整路径 app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{DB_PATH}' db.init_app(app) from .views import views from .auth import auth app.register_blueprint(views, url_prefix='/') app.register_blueprint(auth, url_prefix='/') from .models import User, Note with app.app_context(): db.create_all() return app
修改后数据库文件会自动生成在website目录下。
2. 相对导入报错的解决
相对导入提示“没有父目录”,通常是运行方式错误或main.py的导入方式不符合Python包规范导致的。
确认项目结构
假设你的项目结构如下:
your_project/ ├── main.py └── website/ ├── __init__.py ├── views.py ├── auth.py └── models.py
正确配置main.py
main.py必须以包的形式导入website模块,示例代码:
from website import create_app # 与__init__.py中修正后的函数名保持一致 app = create_app() if __name__ == "__main__": app.run(debug=True)
规范运行方式
禁止直接运行website内部的脚本(如python website/__init__.py),这种操作会将单个脚本视为顶层模块,破坏相对导入的包结构。必须通过根目录的main.py启动项目。
检查子模块的相对导入
views.py、auth.py、models.py中的导入操作需使用正确的相对路径,比如在views.py中导入db:
from . import db # 或导入models中的类 from .models import User
额外注意事项
- 修正
__init__.py中的函数名拼写错误(creat_app→create_app),避免后续导入时出现名称不匹配问题。 - 确保
website目录下的__init__.py存在(即使为空),Python才会将其识别为合法包。
内容的提问来源于stack exchange,提问作者fletcher.l.collins
相关产品推荐
相关产品推荐

