sql >> データベース >  >> RDS >> Mysql

Flask-SQLAlchemyの更新により、MySQLに新しいレコードが作成されます

    さて、私を正しい方向に向けてくれたダニエルとドゥーベに感謝します。基本的に、edit_entryのPOSTメソッドでblog_idを適切に要求しなかったことが原因でした。これが新しい(そして機能している)コードです。

    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)
    

    結局、2つの大きな問題がありました。最初は見落としでした。new_entryテンプレートからedit_entryテンプレートをコピーしたときに、フォームのアクションを変更するのを忘れたため、フォームは実際にnew_entryルートに投稿されていたため、重複していました。その問題を見つけた後、blog_idがrequest.argsで「GET」メソッドに渡されたが、「POST」メソッドでは渡されていなかったことにも気付きました(投稿がリダイレクトから来ていなかったため)。実際にedit_entryテンプレートに新しいフィールドを作成して、blog_idをPOSTに戻しました。




    1. HAVING句を使用した遅いクエリ-高速化できますか?

    2. ContentValuesを介してデータベースにタイムスタンプを挿入します

    3. WindowsでのMySQLとPythonの統合

    4. データベースフォルダにコピーせずに、Androidのres /assetフォルダから読み取り専用データベースを開くことはできますか?