【问题标题】:Flask + SqlAlchemy delete database entriesFlask + SqlAlchemy 删除数据库条目
【发布时间】:2017-07-26 01:39:05
【问题描述】:

我必须有条件地删除数据库条目,但我无法弄清楚,因为表单要求在 uri 中发布正确的参数。我可以使用相同的代码删除 shell 中的条目,但不在视图中。以下是视图和表单:

@app.route('/cancelannualsub/<int:student_id>', methods=['DELETE'])
def cancel_yearly_rec(student_id):

    if not user_authorized():
        return redirect('/')

    user = get_profile_data(session['auth_token'])
    profile_data = user['StudentProfile']

    pkg = Package.query.filter_by(student_id=profile_data.id).first_or_404()

    if request.method=='POST':
        try:
            pkg = Package()
            dbase.session.delete(pkg)
            flash('Package deleted successfully.')
            dbase.session.commit()
        except:
            pass 


        return redirect('plans')
    return render_template('profile/cancel/cancel.html')

表格:

<form action="{{ url_for('cancel_yearly_rec', student_id=***can't render value here***) }}" method='post'>
                    <input type='hidden' name='_method' value='DELETE'
                    <input class='btn' type="submit" value="Cancel" />
                </form>

我正在尝试与 stackoverflow 示例不同的东西。如果我做错了什么或有更好的方法,请提供帮助。

【问题讨论】:

  • 你在这里打错了 pkg = Pacakge() , pacakge -> package
  • 这不是原始代码中的错误...我检查了。现在我要在 student_id="what to add here" 的表单中添加什么。

标签: python mysql flask flask-sqlalchemy


【解决方案1】:

我没有使用正确的格式来渲染 try 块中的模型对象。

应该是这样的:

mymodel = Model.query.filter_by(variable=some_field_data).first_or_404()
dbase.session.delete(mymodel)
dbase.session.commit()

请读者不要对“dbase”感到困惑,因为我做了如下导入: 从应用导入 dbdbase 您可以简单地通过以下方式导入它:

from app import db

或添加“as anything”。 然后,您在文件的其余部分中引用您已导入的任何内容。

【讨论】:

    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 2021-11-24
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多