sqlalchemy.orm.exc.UnmappedInstanceError:类“builtins.int”未映射

问题描述 投票:0回答:1

我在我的项目中使用flask_restful,我试图删除一个条目,但无法做到这一点。 以下是端点实现:

def delete_from_db(self, emp_no):
    db.session.delete(emp_no)
    db.session.commit()

class DeleteEmployee(Resource):
    @marshal_with({
        'message': fields.String
    })
    def delete(self, employee_id: int):
        employee = db.get_or_404(
            Employees, employee_id,
            description='Employee Not Found'
        )
        employee.delete_from_db(emp_no=employee_id)
        return {
            'message': 'Employee Deleted successfully.'
        }

如果我执行终点,,就像这样:

{{base_URL}}/employee/3

我收到以下回复:

  File "/Users/tp/.pyenv/versions/3.7.13/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 3414, in delete
    raise exc.UnmappedInstanceError(instance) from err
sqlalchemy.orm.exc.UnmappedInstanceError: Class 'builtins.int' is not mapped

如果注释

employee.delete_from_db(emp_no=employee_id)
行,它会正常工作,但它不会从数据库中删除记录。

可能是什么问题?

python-3.x flask flask-sqlalchemy flask-restful
1个回答
0
投票

要删除数据,请将模型对象传递给 db.session.delete()。 .

@marshal_with({
    'message': fields.String
})
def delete(self, employee_id: int):
    employee = db.get_or_404(
        Employees, employee_id,
        description='Employee Not Found'
    )
    db.session.delete(employee)
    db.session.commit()
    return {
        'message': 'Employee Deleted successfully.'
    }

在您的情况下,使用实例方法,可以简单地传递

self

def delete_from_db(self):
    db.session.delete(self)
    db.session.commit()
© www.soinside.com 2019 - 2024. All rights reserved.