文章目录
- DynamoDB 简介
- Boto3简介
- 安装和导入 Boto3
- 将 Boto3 连接到 DynamoDB
- 使用 Boto3 在 DynamoDB 中创建表
- 通过 Boto3 删除 DynamoDB 中的表
- 通过 Boto3 列出 DynamoDB 中的表
- 通过 Boto3 在 DynamoDB 中分页
- 通过 Boto3 在 DynamoDB 中排序
- 通过 Boto3 在 DynamoDB 中获取项目
- 通过 Boto3 扫描 DynamoDB 中的项目
- DynamoDB 中的全局二级索引
- 使用 Boto3 备份 DynamoDB 表
- 总结
本文将讨论如何使用 python 查询 Amazon DynamoDB。 我们还将讨论 Boto3 是什么以及它为什么需要查询 DynamoDB。
DynamoDB 简介
DynamoDB 是一种 NoSQL 数据库服务,提供内置安全机制、连续备份、内存缓存和有用的数据导入/导出工具。
DynamoDB 在一个 AWS 区域的不同可用区 (AZ) 之间自动复制数据,增强了针对中断和数据丢失的安全性。 DynamoDB 提供了许多安全功能,包括细粒度访问控制、静态加密和用户活动记录。
Boto3简介
Boto3 是为 Amazon Web Services (AWS) 开发的内置 python 库。 该库可用于交互、创建、配置、管理和使用 Amazon 的不同服务,包括 DynamoDB。
安装和导入 Boto3
要在我们的 Python 工作台中安装 Boto3 库,请使用以下命令。
pip install boto3
输出:
代码:
Import boto3
这会将 boto3 库导入到我们的笔记本中。
将 Boto3 连接到 DynamoDB
我们将使用以下代码通过 Boto3 连接到我们的 DynamoDB。
代码:
import boto3
client = boto3.client('dynamodb',
aws_access_key_id='yyyy',
aws_secret_access_key='xxxx',
region_name='us-east-1')
请记住,数据库必须已经在 AWS DynamoDB 上创建才能通过 Python Boto3 库连接到它。
使用 Boto3 在 DynamoDB 中创建表
DynamoDB 上的表可以通过多种方式创建。 这包括使用 Amazon CLI、AWS 控制台或使用 Boto3。
在这里,我们将按照前面提到的步骤将 Boto3 与我们已经连接到的数据库一起使用。 了解 DynamoDB 客户端和表资源如何变化可以让您根据需要使用其中任何一个,因为该表资源可以显着简化某些操作。
开发人员可以使用 boto3.resource('dynamodb')
资源创建、更新和删除 DynamoDB 表和所有内容。 此资源支持使用条件表达式和表级安全性的项目级安全性。
要对 DynamoDB 数据进行无服务器访问,请将 boto3.resource('dynamodb')
资源与 AWS Lambda 函数结合使用。
import boto3
dynamodb = boto3.resource('dynamodb', region_name='us-west-2')
table = dynamodb.create_table(
TableName='Movies',
KeySchema=[
{
'AttributeName': 'year',
'KeyType': 'HASH' #Partition key
},
{
'AttributeName': 'title',
'KeyType': 'RANGE' #Sort key
}
],
AttributeDefinitions=[
{
'AttributeName': 'id',
'AttributeType': 'N'
},
{
'AttributeName': 'createdAt',
'AttributeType': 'S'
},
],
ProvisionedThroughput={
'ReadCapacityUnits': 10,
'WriteCapacityUnits': 10
}
)
print("Table status:", table.table_status)
通过 Boto3 创建表需要一些时间才能激活和显示。 建议在重试之前稍等片刻,或者我们可以使用服务员功能让我们知道表何时处于活动状态。
import botocore.session
session = botocore.session.get_session()
dynamodb = session.create_client('dynamodb', region_name='us-east-1') # low-level client
waiter = dynamodb.get_waiter('table_exists')
waiter.wait(TableName="my-table-name")
通过 Boto3 删除 DynamoDB 中的表
在 DynamoDB 中删除表非常简单。 如果我们改变主意并想从数据库中删除一个表,我们需要输入以下代码片段。
import boto3
dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
dynamodb.delete_table(
TableName="Movies"
)
请记住,我们要删除的表已经存在于数据库中且名称相同,否则会给我们一条错误消息(未找到表)。
通过 Boto3 列出 DynamoDB 中的表
如果我们有兴趣查找我们所在地区所有可用餐桌的列表,我们需要使用 list()
函数列出该地区所有可用餐桌。
import boto3
dynamodb = boto3.resource('dynamodb', region_name=region)
tables = list(dynamodb.tables.all())
print(tables)
必须确保表的总数小于 100,否则我们将不得不对列表进行分页。
通过 Boto3 在 DynamoDB 中分页
单个列表调用返回最多 1MB 项目的结果。 为了进一步上市,我们需要发出第二个电话。 如果响应对象中存在 LastEvaluatedKey,则应再次调用 ExclusiveStartKey 以从此表中获取更多项。
dynamodb = boto3.resource('dynamodb', region_name=region)
table = dynamodb.Table('my-table')
response = table.query()
data = response['Items']
# LastEvaluatedKey indicates that there are more results
while 'LastEvaluatedKey' in response:
response = table.query(ExclusiveStartKey=response['LastEvaluatedKey'])
data.update(response['Items'])
通过 Boto3 在 DynamoDB 中排序
在数据库端,DynamoDB 只提供了一种对结果进行排序的方法。 如果您的表格缺少结果,则您对项目进行排序的能力仅限于在收到结果后在应用程序代码中这样做。
但是,您可以使用以下语法以降序或升序使用排序键对 DynamoDB 结果进行排序。
import boto3
dynamodb = boto3.resource('dynamodb', region_name=region)
table = dynamodb.Table('my-table')
response = table.query(
ScanIndexForward=False # true = ascending, false = descending
)
data = response['Items']
通过 Boto3 在 DynamoDB 中获取项目
如果我们有兴趣从 DynamoDB 数据库中获取特定项目,则使用 GetItem()
函数。
import boto3
dynamodb = boto3.resource('dynamodb', region_name=region)
table = dynamodb.Table('my-table')
response = table.get_item(Key={
primaryKeyName: "ID-1",
sortKeyName: "SORT_2"
})
通过 Boto3 扫描 DynamoDB 中的项目
表格中的所有信息都可以通过扫描访问。 读取表中的每一项后,数据将由 scan() 方法返回。
当您添加其他选项(如 FilterExpression)时,表扫描操作可以返回更少的所需结果。
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Employees')
response = table.scan()
response['Items']
print(response)
或者
import boto3
from boto3.dynamodb.conditions import Key, Attr
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Employees')
response = table.scan(FilterExpression=Attr('Department').eq('IT'))
print("The query returned the following items:")
for item in response['Items']:
print(item)
DynamoDB 中的全局二级索引
您可以使用全局二级索引查询不包含在主表主键中的属性。 这样做可以避免全表扫描过程带来的延迟和低效率。
全局二级索引也将包括来自主表的属性,但将使用不同的主键进行结构化,从而加快查询速度。
使用 Boto3 备份 DynamoDB 表
要使用 Boto3 为 DynamoDB 表创建按需备份,请使用 create_backup()
方法并将目标备份表名称与表名称一起传递。
import boto3
client = boto3.client('dynamodb')
response = client.create_backup(
TableName='Employees',
BackupName='Employees-Backup-01'
)
print(response)
总结
本文介绍了如何使用 Python Boto3 在 Amazon DynamoDB 上查询 DynamoDB 表、创建、列出和执行其他 CRUD 活动以及执行其他维护任务。