Python 查询 DynamoDB

news2024/9/23 17:24:01

文章目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/658697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【设计模式与范式:行为型】63 | 职责链模式(下):框架中常用的过滤器、拦截器是如何实现的?

上一节课,我们学习职责链模式的原理与实现,并且通过一个敏感词过滤框架的例子,展示了职责链模式的设计意图。本质上来说,它跟大部分设计模式一样,都是为了解耦代码,应对代码的复杂性,让代码满足…

Ribbon LoadBalanced底层机制源码探秘

🍊 Java学习:社区快速通道 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年6月18日 🍊 点…

如何自己开发浏览器js插件

大家都知道在网页控制台编写的js脚本一刷新就没了下面教程教大家如何自己写一个js插件,此教程是小白在网上看到的的确认有效才发出来的,无需借助油猴。 最近工作需要小白研究了一下浏览器插件编写的过程下面分享给大家 步骤 在桌面创建一个文件夹&…

指针与数组---指针与一维数组的关系

C语言的高效得益于它指针功能的强大。然而C语言中的指针和数组的关系似乎很“纠结”,让人爱恨交织。指向数组的指针变量、指针数组等,似乎总是“你中有我,我中有你”。 目录 一、数组名的特殊意义及其在访问数组元素中的作用 二、指针运算…

Linux常用指令和知识(1)

目录 ls cd pwd 相对路径&绝对路径&特殊路径符 mkdir touch-cat-more cp-mv-rm which-find grep-wc 管道符 | echo 重定向符 tail 😶‍🌫️😘创作不易, 多多支持 前言: 我们学习的Linux命令, 其实他们的本体就是一个个…

ctf 逆向 专题题解

本文的目标是,记录一些不具备通用性的,或者比较进阶的题目。之前的另一篇文章则用于记录一些基础知识和通用性较强的基本手法。 文章目录 跨科题目buu fungame:reverse与pwn的结合reverseweb 反跟踪Easyhook:hook例题 vm类型总结一…

我的创作纪念日——512

机缘 没想到不知不觉在CSDN创作就512天了,想到一开始就仅仅想在CSDN记笔记,到现在成为一个小博主,认识到了很多志同道合的伙伴,中间创作我也曾经懒惰过,放弃过,但我一次又一次重新进行创作,虽然…

AcWing801: 二进制中1的个数(两种方法详解)

原题引出 方法一:使用lowbit 算法的时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn),使用lowbit操作,每次操作截取一个数字的最后一个1后面的所有位,每次减去lowbit得到的数字,直到数字减到0,就得到了最终…

【MySQL】选择专题(七)

文章目录 选择题选择题 在关系R ( R # , RN , S # )和S ( S # , SN , SD )中, R 的主码是R # , S 的主码是S #,则S#在R 中称为( A )。 A 外码 B 候选码 C 主码 D 超码 设关系R和S的属性个数分别为2和3,那么等价于( B )。 A. σ1<2(RS) B. σ1<4(RS) C. σ1<2(R…

我们世界中的计算机——从大师视角诠释计算常识

计算机和通信系统&#xff0c;以及由它们所实现的许多事物遍布我们周围。其中一些在日常生活中随处可见&#xff0c;比如笔记本电脑、手机和互联网。今天&#xff0c;在任何公共场所&#xff0c;都会看到许多人在使用手机查询交通路线、购物以及和朋友聊天。与此同时&#xff0…

【大数据】大数据相关概念

文章目录 大数据&#xff1a;一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合&#xff0c;具有海量的数据规模、快速的数据流转、多样的数据类型以及价值密度四大特征。Hadoop&#xff1a;是一个能够对大量数据进行分布式处理的软件框…

15-3.自定义组件的生命周期函数

目录 1 组件自身的生命周期函数 1.1 使用lifetimes声明生命周期函数 1.2 不使用lifetimes声明生命周期函数 2 组件所在页面的生命周期函数 1 组件自身的生命周期函数 created 组件实例刚刚被创建后执行&#xff0c;可以理解为 html模板刚刚搞好attached 组件被放入节…

万物的算法日记|第六天

笔者自述&#xff1a; 一直有一个声音也一直能听到身边的大佬经常说&#xff0c;要把算法学习搞好&#xff0c;一定要重视平时的算法学习&#xff0c;虽然每天也在学算法&#xff0c;但是感觉自己一直在假装努力表面功夫骗了自己&#xff0c;没有规划好自己的算法学习和总结&am…

DJ4-2 数据报网络和虚电路网络

目录 一、连接和无连接服务 二、数据报网络 1、数据报网络的转发表 2、数据报网络的特点 三、虚电路网络 (Virtual Circuits)* 1、虚电路网络的工作方式 2、虚电路网络的特点 一、连接和无连接服务 任何网络中的网络层只会提供两种服务之一&#xff0c;不会同时提供 数…

Mysql数据库之事务(山高水远,他日江湖再见)

文章目录 一、事务的概念二、事务的ACID特点1.原子性&#xff08;Atomicity&#xff09;2.一致性&#xff08;Consistency&#xff09;3.隔离性&#xff08;lsolation&#xff09;4.持久性&#xff08;Durability) 三、并发访问表的一致性问题和事务的隔离级别1.并发访问表的一…

融合模型stacking14条经验总结和5个成功案例(互联网最全,硬核收藏)_机器学习_人工智能_模型竞赛_论文参考

我看了很多关于融合模型stacking文章&#xff0c;很多作者倾向于赞美融合模型stacking&#xff0c;对其缺点轻描淡写&#xff0c;这容易误导初学者。一叶障目就是这意思。 我的很多学员喜欢用融合模型作为论文或专利创新点&#xff0c;这是一个热门技术。 最近有个同学在论文…

设计模式之单例模式笔记

设计模式之单例模式笔记 说明Singleton(单例)目录单例模式之饿汉式-静态成员变量写法测试类 单例模式之饿汉式-静态代码块写法测试类 单例模式之懒汉式-线程不安全写法和线程安全写法测试类 单例模式之懒汉式-双重检查锁方式(推荐使用的方式)单例模式之懒汉式-静态内部类方式(推…

Mysql数据库之存储引擎(羡慕她人,不如提升自己)

一、存储引擎概念 MySQL中的数据用各种不同的技术存储在文件中&#xff0c;每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力&#xff0c;这些不同的技术以及配套的功能在MySQL中称为存储引擎。 存储引擎是MySQL将数据存储在文件系统中的存储方…

ELK日志收集系统简述

一、概述 &#xff08;一&#xff09;ELK由三个组件构成 ELK是三个开源软件的缩写&#xff0c;分别是Elasticsearch、Logstash、Kibana ELK 架构基本组成 &#xff08;二&#xff09;作用 1、日志收集 2、日志分析 3、日志可视化 &#xff08;三&#xff09;为什么使用EL…

计网之应用层

因特网协议概述 常用协议应用层HTTP&#xff08;超文本传输协议&#xff09;、FTP&#xff08;文件传输协议&#xff09;、SMTP&#xff08;简单邮件传输协议&#xff09;、DNS&#xff08;域名系统&#xff09;、DHCP&#xff08;动态主机配置协议&#xff09;、SNMP&#xff…