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)
三、最终导入验证
- 确保代码文件名为
db.py,终端工作目录为项目根目录 - 完成上述所有修正后,重新执行
from db import app即可成功导入
内容的提问来源于stack exchange,提问作者iluvcode
相关产品推荐
相关产品推荐

