Python Flask Restful错误:API中的Delete方法正在删除所有数据库项

Python Flask Restful错误:API中的Delete方法正在删除所有数据库项,python,sqlite,flask,flask-restful,flask-peewee,Python,Sqlite,Flask,Flask Restful,Flask Peewee,我已经编写了一个flask restful API和一个带有peewee的SQLite数据库。我能够“获取”我正在存储数据的艺术品列表。我还能够“获得”单件、“发布”和“发布”而不会出现问题。但是,如果我想删除单个条目,我的API将删除所有条目。现在我只是在用postman测试我的API,所以我知道这不是AJAX或javascript错误(我将在稍后编写)。任何指导都可能有帮助 我已尝试增加发出删除请求所需的查询数量,其中my db中的created_by字段(是一个整数id)必须与身份验证用户

我已经编写了一个flask restful API和一个带有peewee的SQLite数据库。我能够“获取”我正在存储数据的艺术品列表。我还能够“获得”单件、“发布”和“发布”而不会出现问题。但是,如果我想删除单个条目,我的API将删除所有条目。现在我只是在用postman测试我的API,所以我知道这不是AJAX或javascript错误(我将在稍后编写)。任何指导都可能有帮助

我已尝试增加发出删除请求所需的查询数量,其中my db中的created_by字段(是一个整数id)必须与身份验证用户的id匹配。我创建了两个用户,分别发布了两个不同的片段,并对一个片段运行删除请求,但仍然删除了所有片段

def件_或_404(id):
尝试:
piece=models.piece.get(models.piece.id==id)
除models.Piece.DoesNotExist外:
中止(404)
其他:
返回件
课文(资源):
定义初始化(自):
self.reqparse=reqparse.RequestParser()
self.reqparse.add_参数(
“头衔”,
必需=真,
help='没有提供标题',
位置=['form','json']
)
self.reqparse.add_参数(
"地点",,
必需=真,
help='没有提供url',
位置=['form','json']
)
self.reqparse.add_参数(
“说明”,
必需=错误,
nullable=True,
位置=['form','json'],
)
self.reqparse.add_参数(
“创建”,
type=inputs.date,
必需=错误,
help='Date不是YYYY-mm-dd格式',
位置=['form','json']
)
self.reqparse.add_参数(
"价格",,
类型=输入。正,
必需=真,
help=‘没有提供价格’,
位置=['form','json']
)
self.reqparse.add_参数(
“创建人”,
类型=输入。正,
必需=真,
help='没有用户提供',
位置=['form','json']
)
super()。\uuuu init\uuuuu()
@需要auth.login\u
def delete(自我,id):
尝试:
工件=模型。工件。选择()。其中(
models.Piece.id==id
).get()
除models.Piece.DoesNotExist外:
返回make_响应(json.dumps(
{'error':'该片段不存在或不可编辑'}
), 403)
query=Piece.delete()
query.execute()
返回“”,204,{'Location':url\u for('resources.pieces.pieces')}

如果我有id为1、2和3的片段,那么在url.com/api/v1/pieces/1上运行有效的删除请求时,应该只删除id为1的片段。

问题是您正在实例上使用表级方法
delete()
。您还可以使用行级方法
delete\u instance()
。见:

关于如何解决此问题,您有两个选项:

1将您的呼叫更改为delete,以添加与select匹配的位置

query = models.Piece.delete().where(models.Piece.id==id)
query.execute()
看 (注意警告!)

2对对象实例使用
delete\u instance()
方法:

Piece.delete_instance()

请参见

尝试使用不同的变量名而不是
Piece
(Piece=models.Piece.select().where(models.Piece.id==id.get()),我认为这就是为什么在执行
Piece.delete()时会删除所有内容的原因。
我将变量更改为Piece\u to\u delete,并更改了查询变量以反映这一点。我也遇到了同样的问题:(.我想我跳过了文档的这一部分..谢谢你指出!我先尝试了第二个选项,但没有成功。第一个选项成功了,非常感谢!