SQLAlchemy 由于 AttributeError 未更新数据库

问题描述 投票:0回答:1

我在一个带有flask的crm项目上有一个“编辑任务”页面,我已经构建了一个POST路由来更新数据库,然后重定向到“任务页面”。然而,我不断收到

AttributeError
,因为:
'NoneType' object has no attribute 'tarefa'
。但是,我已经在数据库上声明了“tarefa”,它是用户传递的任务应该是什么的文本:

class Tarefas(db.Model):
    id: Mapped[int] = mapped_column(Integer, primary_key=True)
    cliente_id: Mapped[int] = mapped_column(Integer, nullable=False)
    tarefa: Mapped[str] = mapped_column(String(250))
    tipo: Mapped[str] = mapped_column(String(250))
    prioridade: Mapped[str] = mapped_column(String(250))
    prazo: Mapped[Date] = mapped_column(Date)
    status: Mapped[str] = mapped_column(String(250))
    observacao: Mapped[str] = mapped_column(String(500), nullable=True)
    mesa: Mapped[int] = mapped_column(Integer)

这是我的后端:

@app.route('/editar_tarefa/<int:id>', methods=["POST", "GET"])
@login_required
def editar_tarefa(id):
    if request.method == "POST":
        tarefa = request.form.get('tarefa')
        prioridade = request.form.get('prioridade')
        prazo = request.form.get('prazo')
        prazo = datetime.strptime(prazo, "%Y-%m-%d").date() if prazo else None
        status = request.form.get('status')
        observacao = request.form.get('observacao')
        mesa = request.form.get('mesa')
        if mesa == 'mesa':
            mesa = 1
        else:
            mesa = 0
        with app.app_context():
            tarefa_to_update = db.session.execute(db.select(Tarefas).where(Tarefas.id == id)).scalar()
            print(tarefa_to_update.tarefa )
            tarefa_to_update.tarefa = tarefa
            tarefa_to_update.prioridade = prioridade
            tarefa_to_update.prazo = prazo
            tarefa_to_update.status = status
            tarefa_to_update.observacao = observacao
            tarefa_to_update.mesa = mesa
            db.session.commit()
        return redirect(url_for("tarefas"))
    user_name = session.get('user_name')
    result = db.session.execute(db.select(Tarefas).where(Tarefas.id == id))
    tarefa = result.scalar()
    return render_template("editar_tarefa.html", tarefa=tarefa, user_name=user_name)

当我第一次遇到这个问题时,我添加了“with app.app_context():”,但没有解决。我还使用 SQLite 软件的 DB Browser 验证了我的数据库,名称如声明的那样。

我该如何解决?

sqlite flask-sqlalchemy crud
1个回答
0
投票

问题是对象

tarefa_to_update
None

此返回无:

db.session.execute(db.select(Tarefas).where(Tarefas.id == id)).scalar()

你应该使用:

tarefa_to_update = db.session.execute(db.select(Tarefas).where(Tarefas.id == id)).scalar()
if tarefa_to_update is None:
    # return a 404 or raise exception
© www.soinside.com 2019 - 2024. All rights reserved.