You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 12:57:40