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

Flask项目执行from db import app报错ModuleNotFoundError求助

解决from db import app的ModuleNotFoundError及代码中的核心问题

一、导入报错的直接诱因

执行from db import app时出现ModuleNotFoundError: No module named 'app',除了检查文件路径/文件名大小写(确保代码文件为db.py且终端工作目录为项目根目录),更关键的是你的代码存在多处语法、拼写错误,导致模块无法正常加载,进而触发导入异常。

二、代码关键错误修正

以下是必须修正的核心问题:

1. Flask-SQLAlchemy配置键名错误

配置键为全大写,修正后:

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

2. 数据库模型类拼写与缩进错误

  • db.model → db.Model(首字母大写)
  • db.column → db.Column(首字母大写)
  • db.string → db.String(首字母大写)
  • Integer类型无需传参数,手机号建议用String存储(避免前导零丢失)
  • datetime.utcnow() → datetime.utcnow(传递函数而非调用结果)
  • __repr__方法需缩进至Camper类内部

修正后的模型类:

class Camper(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String(20), nullable=False)
    LastN = db.Column(db.String(20), nullable=False)
    PhoneNumber = db.Column(db.String(20), default='')
    Agedb = db.Column(db.Integer, default=0)
    CampingTime = db.Column(db.String(20), nullable=False)
    IsAllergic = db.Column(db.Boolean, default=False)
    date_created = db.Column(db.DateTime, default=datetime.utcnow)

    def __repr__(self):
        return '<Camper %r>' % self.id

3. 路由与视图函数错误

  • @app.route("/", method=['POST', 'GET']) → methods=['POST', 'GET'](复数形式)
  • hello视图中,创建Camper对象时需使用模型中定义的字段(而非不存在的content)
  • Camper.quary → Camper.query(拼写错误)
  • delete视图中redirect('/')需添加return关键字,否则无法跳转
  • update_info视图的else分支需添加return返回模板

修正后的核心视图代码:

@app.route("/", methods=['POST', 'GET'])
def hello():
    if request.method == 'POST':
        camper_name = request.form['name']
        camper_lastn = request.form['lastn']
        new_camper = Camper(Name=camper_name, LastN=camper_lastn)
        try:
            db.session.add(new_camper)
            db.session.commit()
            return redirect('/')
        except Exception as e:
            return f'There was an issue adding info: {str(e)}'
    else:
        registered = Camper.query.order_by(Camper.date_created).all()
        return render_template('index.html', registered=registered)

@app.route("/delete/<int:id>/")
def delete(id):
    deletea = Camper.query.get_or_404(id)
    try:
        db.session.delete(deletea)
        db.session.commit()
        return redirect('/')
    except Exception as e:
        return f'There was a problem deleting: {str(e)}'

@app.route('/users/<int:id>/', methods=['GET', 'POST'])
def update_info(id):
    registered = Camper.query.get_or_404(id)
    if request.method == 'POST':
        registered.Name = request.form['name']
        registered.LastN = request.form['lastn']
        try:
            db.session.commit()
            return redirect('/')
        except Exception as e:
            return f'Problem occurred: {str(e)}'
    else:
        return render_template('update.html', registered=registered)

4. 数据库初始化优化

避免重复初始化,改用Flask 2.x推荐的方式:

db = SQLAlchemy()

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)

# 在启动时创建数据库表
if __name__ == '__main__':
    with app.app_context():
        db.create_all()
    app.run(debug=True)

三、最终导入验证

  1. 确保代码文件名为db.py,终端工作目录为项目根目录
  2. 完成上述所有修正后,重新执行from db import app即可成功导入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:08:10