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

Flask项目无法从config.py导入app和db的问题求助

问题描述

项目结构:

  • backend
    • main.py
    • models.py
    • config.py

config.py 代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///mydatabase.db"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

db = SQLAlchemy(app)

main.py 代码:

from flask import request, jsonify
from config import app,db
from models import Contact

@app.route("/contacts", methods =["GET"])
def get_contacts():
    contacts = Contact.query.all()
    json_contacts = list(map(lambda x: x.to_json(), contacts))
    return jsonify({"contacts": json_contacts})

if __name__ == "__main__":
    with app.app_context():
        db.create_all()

    app.run(debug = True)

运行main.py时触发错误:

Traceback (most recent call last):
File "c:\Users\Nicov\Uni\FlaskDemo\backend\main.py", line 2, in <module>
from config import app,db
ImportError: cannot import name 'app' from 'config' (c:\Users\Nicov\Uni\FlaskDemo\backend\config.py)

尝试使用相对路径from .config import app,db仍未解决问题。


解决方案

以下是几种可行的排查与修复方法:

  1. 将backend目录标记为Python包
    在backend目录下创建空的__init__.py文件,让Python识别该目录为可导入的包。之后在main.py中使用相对导入:
from .config import app, db

注意:需从backend的父目录运行脚本,或把backend目录添加到Python搜索路径中。

  1. 手动添加路径到Python搜索列表
    在main.py最顶部插入代码,将当前脚本所在目录加入Python模块搜索路径:
import sys
from pathlib import Path
sys.path.append(str(Path(__file__).parent))

之后即可正常使用from config import app, db进行导入。

  1. 排查循环导入问题
    检查models.py是否也导入了config中的app或db,若存在双向导入会导致加载失败。可调整models.py的导入逻辑:
  • 避免在文件顶部直接导入db,改为在函数内部延迟导入;
  • 确保models.py的导入语句在config完成初始化之后执行。
  1. 修正脚本运行方式
    确保在backend目录下执行main.py,比如命令行中:
cd c:\Users\Nicov\Uni\FlaskDemo\backend
python main.py

若使用IDE运行,需检查IDE的工作目录是否设置为backend文件夹。


内容的提问来源于stack exchange,提问作者Nico Vogel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:40:59