Flask + SqlAlchemy删除数据库条目

时间:2017-03-06 08:58:20

标签: python mysql flask flask-sqlalchemy

我必须有条件地删除数据库条目,我无法弄清楚,因为表单要求在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示例中的不同内容。如果我做错了或者有更好的方法,请提供协助。

1 个答案:

答案 0 :(得分:0)

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

它应该是这样的:

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

对于读者来说,不要与“dbase”混淆,因为我做了这样的导入: 从应用导入db作为dbase 您可以通过以下方式导入它:

from app import db

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