如何查询DynamoDB中一列的所有行?

Lê *_*ành 3 python amazon-dynamodb boto3

我只是在短时间内使用 AWS DynamoDB。我想知道如何使用此语句获得相同的结果(没有 WHERE 子句):

SELECT column1 FROM DynamoTable;

我尝试过(但失败了):

 import boto3
 dynamodb = boto3.resource('dynamodb')
 table = dynamodb.Table('DynamoTable')
 from boto3.dynamodb.conditions import Key, Attr
 resp = table.query(KeyConditionExpression=Key('column1'))
Run Code Online (Sandbox Code Playgroud)

它需要Key().eq()Key().begin_with()...

resp = table.scan()已经尝试过了,但是响应数据的字段太多,而我只需要column1

谢谢。

amp*_*and 11

这使您可以直接获取所需的列,而无需遍历整个数据集

import boto3

def getColumn1Items():
     dynamodb = boto3.resource('dynamodb')
     table = dynamodb.Table('DynamoTable')
     resp = table.scan(AttributesToGet=['column1'])

     return resp['Items']
Run Code Online (Sandbox Code Playgroud)

  • 您能解释一下为什么这比公认的答案更好吗? (3认同)
  • 使用 ProjectionExpression https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html#API_Scan_RequestSyntax (2认同)
  • 旧的但仍然相关:) 这更好,因为没有从数据库中获取额外的列。上面的扫描实现选择所有列并将它们“本地”删除。 (2认同)

ALF*_*LFA 3

您绝对应该使用扫描操作。检查文档以使用 python 实现它。

关于如何仅选择您可以使用的特定属性:

import boto3

def getColumn1Items():
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('DynamoTable')
    response = table.scan()

    return [i['column1'] for i in response['Items']]
Run Code Online (Sandbox Code Playgroud)

您必须迭代整个表并只获取您需要的列。

  • 请注意,扫描操作执行全表扫描并读取表的所有内容。一旦数据量增加,这可能会给性能带来问题。 (2认同)