sql >> Databáze >  >> RDS >> Mysql

Aktualizace Flask-SQLAlchemy vytváří nový záznam v MySQL

Dobře, takže díky Danielovi a Doobehovi za to, že mě nasměrovali správným směrem. V podstatě to přišlo na to, že jsem nepožadoval správně blog_id v metodě POST edit_entry. Zde je nový (a funkční) kód.

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)

Nakonec to byly dva hlavní problémy. Pěst byla nedopatřením:když jsem zkopíroval šablonu edit_entry ze šablony new_entry, zapomněl jsem změnit akci formuláře, takže formulář se ve skutečnosti odesílal do cesty new_entry, tedy duplikace. Poté, co jsem našel tento problém, jsem si také uvědomil, že zatímco blog_id byl předán v request.args metodě 'GET', nebyl předán metodou 'POST' (protože příspěvek nepocházel z přesměrování), takže Ve skutečnosti jsem vytvořil nové pole v šabloně edit_entry, abych předal blog_id zpět do POST.




  1. vrátit prázdné řádky pro neexistující data

  2. Vyladění MySQL pro rychlé vytváření sloupců/indexů během vývoje

  3. Postgres:Jak udělat složené klíče?

  4. Jak zjistit velikost indexů v MySQL