如何使用 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Pycharm自动添加文件头注释和函数注释参数的方法

    Pycharm自动添加文件头注释和函数注释参数的方法

    这篇文章主要介绍了Pycharm自动添加文件头注释和函数注释参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Jupyter notebook远程访问服务器的方法

    Jupyter notebook远程访问服务器的方法

    今天小编就为大家分享一篇Jupyter notebook远程访问服务器的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python实现京东秒杀功能

    python实现京东秒杀功能

    这篇文章主要为大家详细介绍了python实现京东秒杀功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Python递归实现汉诺塔算法示例

    Python递归实现汉诺塔算法示例

    这篇文章主要介绍了Python递归实现汉诺塔算法,结合实例形式分析了汉诺塔算法的原理、实现步骤与相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • Python asyncio异步编程常见问题小结

    Python asyncio异步编程常见问题小结

    本文主要介绍了Python asyncio异步编程常见问题小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Python2与Python3的区别实例分析

    Python2与Python3的区别实例分析

    这篇文章主要介绍了Python2与Python3的区别,结合实例形式分析了Python2与Python3在输出、编码、函数、运算等操作的常见区别与使用技巧,需要的朋友可以参考下
    2019-04-04
  • Python爬虫基础之XPath语法与lxml库的用法详解

    Python爬虫基础之XPath语法与lxml库的用法详解

    这篇文章主要给大家介绍了关于Python爬虫基础之XPath语法与lxml库用法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • python 将print输出的内容保存到txt文件中

    python 将print输出的内容保存到txt文件中

    本文通过代码给大家介绍了python 将print输出的内容保存到txt文件中,代码很简短,需要的朋友可以参考下
    2018-07-07
  • 使用Pyinstaller转换.py文件为.exe可执行程序过程详解

    使用Pyinstaller转换.py文件为.exe可执行程序过程详解

    这篇文章主要介绍了使用Pyinstaller转换.py文件为.exe可执行程序过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • python中的内置函数max()和min()及mas()函数的高级用法

    python中的内置函数max()和min()及mas()函数的高级用法

    这篇文章主要介绍了python中的内置函数max()和min()的相关知识及python中内置函数max()的高级用法,需要的朋友可以参考下
    2018-03-03

最新评论