Skip to main content

尝试使 AWS boto3 更加 Pythonic 的工具集合

项目描述

awspy工具

##DynamoDBDataStore

这是一个帮助 DynamoDB 更易于使用的 Python 包。

首先,从 awspytools 导入 DynamoDBDatastore:

from awspytools import DynamoDBDataStore

使用表名初始化存储:

store = DynamoDBDataStore(table_name='DynamoDB Table Name')

默认情况下,我们假设以下哈希、排序和索引键:

hash_key = 'PK'
sort_key = 'SK'
GSI1_HASH_KEY = 'GSI1PK'
GSI1_SORT_KEY = 'GSI1SK'
GSI2_HASH_KEY = 'GSI2PK'
GSI2_SORT_KEY = 'GSI2SK'

要覆盖这些值,您可以按如下方式定义您的商店:

store = DynamoDBDataStore(
    table_name='DynamoDB Table Name',
    hash_key='custom_hash',
    sort_key='custom_sort',
    use_default_index_keys=False
)

您可以按如下方式添加自定义索引键:

store.add_index_key('custom gsi 1')

或者您可以添加许多索引键,如下所示:

store.add_index_keys(['custom gsi 1 hash', 'custom gsi 1 sort'])

要获取文档,请执行以下操作:

result = store.get_document(index=('hash_key', 'sort_key'), return_index=True)

如果您指定:

return_index=False

响应对象将没有响应中指定的哈希/排序键或 GSI 键。

要保存文档,只需执行以下操作:

store.save_document(
    document={
        "number": 1,
        "hello": "world",
        "foo": ['bar', 'spam'],
        "foo": {
            "spam": "eggs"
        }
    },
    index=('hash_id', 'sort_id')
)

要获取多个文档,您需要提供查询。请注意,这会为您分页结果,以便返回所有文档!

query = {
		'ExpressionAttributeNames': {'#PK': 'PK'},
		'ExpressionAttributeValues': {':PK': {'S': 'hash_key'}},
		'KeyConditionExpression': '#PK = :PK'
	}
result = store.get_documents(query)

删除文档: result = store.delete_document(index=('hash_key', 'sort_key'))

为了执行批处理请求,我们有一个 boto3 的 batch_write_item 的包装器:

batch_request = store.batch_request(
    request_items=[ 
         { 
            "DeleteRequest": {...}, #As per boto3's parameter structure
            "PutRequest": {...} #As per boto3's document structure parameter structure
         }
      ]
)

要执行交易:

transaction_items = [
    {
        'Update': {
            'Key': {
                'PK': {'S': 'hash'},
                'SK': {'S': 'sort'},
            },
            'UpdateExpression': 'SET some_key = :some_value',
            'ExpressionAttributeValues': {
                ':some_value': {'S': 'hello world'},
            },
            'TableName': store.table_name
        }
    },
    {
        'Update': {
            'Key': {
                'PK': {'S': 'hash'},
                'SK': {'S': 'sort'},
            },
            'UpdateExpression': 'SET new_key = :new_value',
            'ExpressionAttributeValues': {
                ':new_value': {'S': 'hello world'},
            },
            'TableName': store.table_name
        }
    }
]
store.transaction_write(transaction_items, "some_unique_id")

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

awspytools-0.1.1.tar.gz (4.8 kB 查看哈希

已上传 source

内置分布

awspytools-0.1.1-py3-none-any.whl (5.6 kB 查看哈希

已上传 py3