我正在使用 PynamoDB 查询 DynamoDB 表。它是一个基本表,user_id为PK,name为SK。我还创建了一个 LSI,其中 user_id 为 PK,单位为 SK。
要根据 user_id 和 name 进行查询,我们可以按以下方式编写查询。
result = userModel.query(user_id, name)
print(result)
上面的代码运行良好。现在假设我需要根据 user_id 和单位(多个值)查询表,我们在 pynamodb 中有条件表达式。我正在尝试使用“is_in”方法。下面是查询。这里“unit_index”是LSI,“unit”是属性名称。
result = userModel.unit_index.query(
user_id,
userModel.unit.is_in(1,2)
)
上述查询不起作用。我收到以下错误。
Failed to query items: An error occurred (ValidationException) on request (525267c5-b4fb-46a3-a8a9-008af5b234a6) on table (user_table) when calling the Query operation: Invalid operator used in KeyConditionExpression: IN
您能让我知道在不使用 for 循环的情况下编写查询的最佳方式是什么吗?
无法使用查询在排序键上使用
IN
运算符。
您需要对列表中的每个值进行一次查询,或者使用
ExecuteStatement
,它允许您使用 IN
运算符提供最多 50 个值。
https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ExecuteStatement.html