将 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'
        )