用python用两种不同的方式编写的相同函数,一种是正确的,另一种是错误的

问题描述

我想知道以下函数以python的不同方式编写。 第一项功能是正常工作并取得成功。返回正确的数据,并成功从数据库删除该记录。 在第二个中,返回正确的数据,但在数据库中不删除任何内容!!!应该删除的记录仍然存在。

您认为阻止第二个功能成功从数据库删除记录的原因是什么?

注意:我使用FLASK sqlAchemy连接到postgress数据库。类名是(电影),表名是(电影)

一个成功函数是:

# Creating endpoint to delete a movie by providing movie_id
@app.route('/movies/<int:movie_id>',methods = ['DELETE'])
def delete_movie(movie_id):
    movie = Movie.query.filter(Movie.id == movie_id).one_or_none()

    if movie is None:
        abort(404)  # abort if id is not found
    else:
        try:
            movie.delete()
            # return movie id that was deleted
            return jsonify({
                'success': True,'deleted': movie_id
            })
        except Exception:
            abort(422)

第二个失败功能是:

@app.route('/movies/<int:movie_id>',methods = ['DELETE'])
def delete_movie(movie_id):
    movie = Movie.query.filter(Movie.id == movie_id)
    movie_availability = movie.one_or_none()

    if movie_availability is None:
        abort(404)  # abort if id is not found
    else:
        try:
            movie.delete()
            # return movie id that was deleted
            return jsonify({
                'success': True,'deleted': movie_id
            })
        except Exception:
            abort(422)

解决方法

您需要在第二个示例中删除movie_availability,而不是movie

try:
    movie_availability.delete()

在第二个示例中,movie_availability成为从数据库中检索的记录,而在第一个示例中,它被压缩成一行并分配给movie