迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 查询 DynamoDB

作者:迹忆客 最近更新:2023/06/01 浏览次数:

本文将讨论如何使用 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

输出:

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)

//or

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 活动以及执行其他维护任务。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python Crc32 介绍

发布时间:2023/06/02 浏览次数:182 分类:Python

本篇文章将介绍使用 Python 中的 binascii 或 zlib 库计算数据的 crc32。Python CRC32 。CRC32 是数据的校验和,也称为循环冗余校验,用于检查数据的数字传输中存在的错误。

在 Python 中使用 Luhn 算法验证数字

发布时间:2023/06/02 浏览次数:164 分类:Python

这篇文章解释了用 Python 编写 Luhn 算法并根据算法验证数字。在 Python 中使用 Luhn 算法验证数字 Luhn 算法验证器有助于检查合法数字并将其与不正确或拼写错误的输入分开。

Python - 匹配多行文本块的正则表达式

发布时间:2023/06/02 浏览次数:192 分类:Python

本文讨论了在多行字符串中搜索特定模式的方法。 该解决方案折衷了已知和未知模式的几种方法,并解释了匹配模式的工作原理。编写正则表达式以匹配多行字符串的原因

在 Python 中使用正则表达式捕获组

发布时间:2023/06/02 浏览次数:78 分类:Python

本篇文章介绍了如何借助 Python 中的正则表达式捕获组。 我们还将了解这些群体以及我们如何捕获它们。 让我们开始吧。在 Python 中使用正则表达式捕获组

Python 正则表达式转义

发布时间:2023/06/02 浏览次数:64 分类:Python

这篇文章是关于 Python 正则表达式转义的。 此外,我们将介绍 Python 正则表达式转义以及如何通过适当的示例代码使用它,以及 Python 正则表达式的多种用途。

在 Python 中使用 Re 模块的正则表达式通配符

发布时间:2023/06/02 浏览次数:51 分类:Python

通配符在正则表达式中用作表示或交换一个或多个字符的符号。 这些主要用于简化搜索条件。本文详细解释了如何在 Python 中使用带有通配符的 re.sub() 来匹配字符串与正则表达式。使用 re.sub

在 Python 中为对象添加属性

发布时间:2023/06/02 浏览次数:88 分类:Python

我们将介绍如何在 Python 中为对象添加属性。 我们还将通过示例介绍如何在 Python 中更改对象的属性。在 Python 中为对象添加属性 在 Python 中,我们时常使用对象,因为 Python 是一种面向对象的语

Python 中的匿名对象

发布时间:2023/06/02 浏览次数:185 分类:Python

本篇文章将介绍在 Python 中创建匿名对象的方法。在 Python 中使用 namedtuple 类创建匿名对象 匿名对象只是一个没有真实名称的值。 因此,它被称为匿名。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便