Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ein Flask-SQLAlchemy-Update erstellt einen neuen Datensatz in MySQL

Okay, danke an Daniel und Doobeh, die mich in die richtige Richtung gewiesen haben. Im Grunde kam es darauf an, dass ich die blog_id in der POST-Methode von edit_entry nicht richtig angefordert habe. Hier ist der neue (und funktionierende) Code.

def edit_entry():
    form = BlogEntry()
    if request.method == 'POST':
        blog_id = request.form.get('blog_id')
        update = db.session.query(models.Blog).filter_by(id = blog_id).update({
             'title': request.form.get('title'),
             'content': request.form.get('content')
        })
        db.session.commit()
        return redirect(url_for('blog'))
    elif request.method == 'GET':
        blog_id = int(request.args['blog_id'])
        post = models.Blog.query.filter_by(id = blog_id).first_or_404()
        context = {
            'copyright': COPYRIGHT,
            'form': form,
            'blog_id': blog_id
        }
        form.title.data = post.title
        form.content.data = post.content
        return render_template('edit_entry.html', **context)

Am Ende gab es zwei große Probleme. Faust war ein Versehen:Als ich die edit_entry-Vorlage aus der new_entry-Vorlage kopierte, vergaß ich, die Aktion des Formulars zu ändern, sodass das Formular tatsächlich auf der new_entry-Route gepostet wurde, daher die Duplizierung. Nachdem ich dieses Problem gefunden hatte, stellte ich auch fest, dass blog_id zwar in request.args an die 'GET'-Methode übergeben wurde, aber nicht in der 'POST'-Methode (da der Beitrag nicht von der Umleitung kam). Ich habe tatsächlich ein neues Feld in der edit_entry-Vorlage erstellt, um die blog_id zurück an POST zu übergeben.