如何使用 python查询Amazon DynamoDB

 更新时间:2023年06月20日 11:22:28   作者:迹忆客  
本文介绍了如何使用Python Boto3在Amazon DynamoDB上查询DynamoDB 表、创建、列出和执行其他 CRUD 活动以及执行其他维护任务,本文给大家介绍的非常详细,需要的朋友参考下

本文将讨论如何使用 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 活动以及执行其他维护任务。

到此这篇关于Python 查询 DynamoDB的文章就介绍到这了,更多相关Python 查询 DynamoDB内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pytorch中expand()的使用(扩展某个维度)

    Pytorch中expand()的使用(扩展某个维度)

    这篇文章主要介绍了Pytorch中expand()的使用(扩展某个维度),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Python3基础之基本数据类型概述

    Python3基础之基本数据类型概述

    这篇文章主要介绍了Python3的基本数据类型,需要的朋友可以参考下
    2014-08-08
  • Python 根据日志级别打印不同颜色的日志的方法示例

    Python 根据日志级别打印不同颜色的日志的方法示例

    这篇文章主要介绍了Python 根据日志级别打印不同颜色的日志的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 教你使用Python实现一个简易版Web服务器

    教你使用Python实现一个简易版Web服务器

    这篇文章主要介绍了教你使用Python实现一个简易版Web服务器,本篇文章将通过实现一个简易版的Web服务器,帮助读者理解Python网络编程的基本概念和技巧,需要的朋友可以参考下
    2023-04-04
  • python中SSH远程登录设备的实现方法

    python中SSH远程登录设备的实现方法

    本文主要介绍了python中SSH远程登录设备,python中支持SSH协议的模块主要有Paramiko和netmiko两种,本文主要介绍了netmiko模块,具有一定的参考价值,感兴趣的可以了解一下
    2022-04-04
  • Python读写Excel大数据文件的3种有效方式对比

    Python读写Excel大数据文件的3种有效方式对比

    Python处理Excel大数据有很多方式,不过Excel撑死才104万行,能有多大的数据,本文主要介绍了三种常见方式,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-09-09
  • Python使用Arrow管理日期与时间的完整指南

    Python使用Arrow管理日期与时间的完整指南

    时间在数据分析中扮演着至关重要的角色,而选择适当的时间处理模块对于提高代码效率和可读性至关重要,本文将深入介绍 Arrow 模块,探讨其相对于其他时间处理模块的优势,以及在数据分析中的实际应用,需要的朋友可以参考下
    2025-06-06
  • python实现图像高斯金字塔的示例代码

    python实现图像高斯金字塔的示例代码

    这篇文章主要介绍了python实现图像高斯金字塔的示例代码,帮助大家更好的利用python处理图片,感兴趣的朋友可以了解下
    2020-12-12
  • Python self用法详解

    Python self用法详解

    这篇文章主要介绍了Python self用法的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-11-11
  • 详解如何利用Python绘制科赫曲线

    详解如何利用Python绘制科赫曲线

    科赫曲线是一种像雪花的几何曲线,所以又称为雪花曲线,它是de Rham曲线的特例。本文将利用Python语言实现这一曲线,需要的可以参考一下
    2022-05-05

最新评论