sql >> Database teknologi >  >> RDS >> Mysql

En Flask-SQLAlchemy-opdatering skaber en ny rekord i MySQL

Okay, så tak til Daniel og Doobeh for at pege mig i de rigtige retninger. Dybest set kom det ned til, at jeg ikke anmodede om blog_id korrekt i POST-metoden for edit_entry. Her er den nye (og fungerende) kode.

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)

Der endte med at være to store problemer. Fist var en forglemmelse:da jeg kopierede edit_entry-skabelonen fra new_entry-skabelonen, glemte jeg at ændre formularens handling, så formularen blev faktisk sendt til new_entry-ruten, og dermed duplikeringen. Efter at jeg fandt det problem, indså jeg også, at selvom blog_id blev videregivet i request.args til 'GET'-metoden, blev det ikke videregivet i 'POST'-metoden (da indlæg ikke kom fra omdirigeringen), så Jeg oprettede faktisk et nyt felt i edit_entry-skabelonen for at sende blog_id tilbage til POST.




  1. Parse XML til SQL Server

  2. MySqlCommand Command.Parameters.Add er forældet

  3. FEJL:Relationssteder findes ikke Heroku db import

  4. Slet række i mysql og tilknyttet fra mappe