将 AttributesToGet 和 KeyConditionExpression 与 boto3 和 dynamodb 一起使用
Using both AttributesToGet and KeyConditionExpression with boto3 and dynamodb
我对 return 具有给定分区键值(即 u_type =“前景”)的所有记录感兴趣。但我只想 return 每个记录的特定属性。
我从 boto 文档和 Stack 答案中收集了以下片段:
resp = table.query(
Select='SPECIFIC_ATTRIBUTES',
AttributesToGet=[
'u_type','ID','action','status','first_name','last_name'
],
KeyConditionExpression=Key('u_type').eq("prospect")
)
当 运行 出现以下错误时:
An error occurred (ValidationException) when calling the Query operation:
Can not use both expression and non-expression parameters in the same request:
Non-expression parameters: {AttributesToGet}
Expression parameters: {KeyConditionExpression}
此外,我已经尝试通过以下实现使用 ProjectionExpression:
resp = table.query(
KeyConditionExpression= 'u_type = :hkey',
ExpressionAttributeValues= {
':hkey': "prospect",
},
Limit= 200,
ProjectionExpression= ['u_type','ID','action','status','first_name','last_name']
)
请注意,这是根据为节点编写的 another stack overflow answer 调整的。
使用此 ProjectionExpression 实现时,我遇到以下错误:
Invalid type for parameter ProjectionExpression, value:
['u_type', 'ID', 'action', 'status', 'first_name', 'last_name'], type: <class 'list'>,
valid types: <class 'str'>
我不确定我的方法或描述是否不清楚,但本质上我想使用 boto3 和 dynamo 执行以下 SQL 等效操作:
SELECT u_type,ID,action,status,first_name,last_name
FROM table
WHERE u_type LIKE 'prospect';
注:分区键:u_type,排序键:ID
AttributesToGet
是遗留参数,the documentation 建议改用较新的 ProjectionExpression
。该文档还说 ProjectionExpression
是一个字符串,而不是一个列表。它可能是 NodeJS SDK 中的列表,在您链接到的答案中,但在 Python 文档中说它必须是一个字符串。所以我会试试这个:
resp = table.query(
KeyConditionExpression= 'u_type = :hkey',
ExpressionAttributeValues= {
':hkey': "prospect",
},
Limit= 200,
ProjectionExpression='u_type,ID,action,status,first_name,last_name'
)
我对 return 具有给定分区键值(即 u_type =“前景”)的所有记录感兴趣。但我只想 return 每个记录的特定属性。 我从 boto 文档和 Stack 答案中收集了以下片段:
resp = table.query(
Select='SPECIFIC_ATTRIBUTES',
AttributesToGet=[
'u_type','ID','action','status','first_name','last_name'
],
KeyConditionExpression=Key('u_type').eq("prospect")
)
当 运行 出现以下错误时:
An error occurred (ValidationException) when calling the Query operation:
Can not use both expression and non-expression parameters in the same request:
Non-expression parameters: {AttributesToGet}
Expression parameters: {KeyConditionExpression}
此外,我已经尝试通过以下实现使用 ProjectionExpression:
resp = table.query(
KeyConditionExpression= 'u_type = :hkey',
ExpressionAttributeValues= {
':hkey': "prospect",
},
Limit= 200,
ProjectionExpression= ['u_type','ID','action','status','first_name','last_name']
)
请注意,这是根据为节点编写的 another stack overflow answer 调整的。
使用此 ProjectionExpression 实现时,我遇到以下错误:
Invalid type for parameter ProjectionExpression, value:
['u_type', 'ID', 'action', 'status', 'first_name', 'last_name'], type: <class 'list'>,
valid types: <class 'str'>
我不确定我的方法或描述是否不清楚,但本质上我想使用 boto3 和 dynamo 执行以下 SQL 等效操作:
SELECT u_type,ID,action,status,first_name,last_name
FROM table
WHERE u_type LIKE 'prospect';
注:分区键:u_type,排序键:ID
AttributesToGet
是遗留参数,the documentation 建议改用较新的 ProjectionExpression
。该文档还说 ProjectionExpression
是一个字符串,而不是一个列表。它可能是 NodeJS SDK 中的列表,在您链接到的答案中,但在 Python 文档中说它必须是一个字符串。所以我会试试这个:
resp = table.query(
KeyConditionExpression= 'u_type = :hkey',
ExpressionAttributeValues= {
':hkey': "prospect",
},
Limit= 200,
ProjectionExpression='u_type,ID,action,status,first_name,last_name'
)