我一直试图围绕boto3(适用于AWS的Python SDK)中batch_write_item的工作原理。我的代码如下:
users = self.scan_table(filterKey="key",filterValue="value",table="users")
deleteUsers = []
# Create lists to delete
for u in users:
deleteUsers.append({"DeleteRequest":{"Key":{"S":u["user_id"]}}})
# Delete items
ret = self.db.batch_write_item(
RequestItems={
"users":delUsers
}
)
输出如下(对于每个要删除的项目):
ClientError: An error occurred (ValidationException) when calling the
BatchWriteItem operation: The provided key element does not match the schema
据我所知,我完全遵循documentation中的规定说明。我错过了什么?
编辑: 根据jarmod的评论,我觉得我需要指明我确实使用的是boto3资源,而不是客户端。 client与resource有两套独立的文档。事实证明,建议使用正确使用的功能文档。
答案 0 :(得分:0)
哦,事实证明我没有正确阅读文档(尽管它可以在某些地方更加清晰)。我更改了以下代码:
# Create lists to delete
for u in users:
delUsers.append({"DeleteRequest":{"Key":{"S":u["user_id"]}}})
要:
# Create lists to delete
for u in users:
delUsers.append({"DeleteRequest":{"Key":{"user_id":u["user_id"]}}})
解释是我假设" S"是指键的类型,但这并不是什么要求。在玩弄删除括号并玩弄虚拟数据后,很明显我需要更改" S"到我试图影响的表的主键的实际名称,在这种情况下," user_id"。
之后它运作得很好。