如何使用 python查詢Amazon DynamoDB
本文將討論如何使用 python 查詢 Amazon DynamoDB。 我們還將討論 Boto3 是什么以及它為什么需要查詢 DynamoDB。
DynamoDB 簡介
DynamoDB 是一種 NoSQL 數(shù)據(jù)庫服務,提供內置安全機制、連續(xù)備份、內存緩存和有用的數(shù)據(jù)導入/導出工具。
DynamoDB 在一個 AWS 區(qū)域的不同可用區(qū) (AZ) 之間自動復制數(shù)據(jù),增強了針對中斷和數(shù)據(jù)丟失的安全性。 DynamoDB 提供了許多安全功能,包括細粒度訪問控制、靜態(tài)加密和用戶活動記錄。
Boto3簡介
Boto3 是為 Amazon Web Services (AWS) 開發(fā)的內置 python 庫。 該庫可用于交互、創(chuàng)建、配置、管理和使用 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')
請記住,數(shù)據(jù)庫必須已經(jīng)在 AWS DynamoDB 上創(chuàng)建才能通過 Python Boto3 庫連接到它。
使用 Boto3 在 DynamoDB 中創(chuàng)建表
DynamoDB 上的表可以通過多種方式創(chuàng)建。 這包括使用 Amazon CLI、AWS 控制臺或使用 Boto3。
在這里,我們將按照前面提到的步驟將 Boto3 與我們已經(jīng)連接到的數(shù)據(jù)庫一起使用。 了解 DynamoDB 客戶端和表資源如何變化可以讓您根據(jù)需要使用其中任何一個,因為該表資源可以顯著簡化某些操作。
開發(fā)人員可以使用 boto3.resource('dynamodb')
資源創(chuàng)建、更新和刪除 DynamoDB 表和所有內容。 此資源支持使用條件表達式和表級安全性的項目級安全性。
要對 DynamoDB 數(shù)據(jù)進行無服務器訪問,請將 boto3.resource('dynamodb')
資源與 AWS Lambda 函數(shù)結合使用。
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 創(chuàng)建表需要一些時間才能激活和顯示。 建議在重試之前稍等片刻,或者我們可以使用服務員功能讓我們知道表何時處于活動狀態(tài)。
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 中刪除表非常簡單。 如果我們改變主意并想從數(shù)據(jù)庫中刪除一個表,我們需要輸入以下代碼片段。
import boto3 dynamodb = boto3.resource('dynamodb', region_name='us-east-1') dynamodb.delete_table( TableName="Movies" )
請記住,我們要刪除的表已經(jīng)存在于數(shù)據(jù)庫中且名稱相同,否則會給我們一條錯誤消息(未找到表)。
通過 Boto3 列出 DynamoDB 中的表
如果我們有興趣查找我們所在地區(qū)所有可用餐桌的列表,我們需要使用 list()
函數(shù)列出該地區(qū)所有可用餐桌。
import boto3 dynamodb = boto3.resource('dynamodb', region_name=region) tables = list(dynamodb.tables.all()) print(tables)
必須確保表的總數(shù)小于 100,否則我們將不得不對列表進行分頁。
通過 Boto3 在 DynamoDB 中分頁
單個列表調用返回最多 1MB 項目的結果。 為了進一步上市,我們需要發(fā)出第二個電話。 如果響應對象中存在 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 中排序
在數(shù)據(jù)庫端,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 數(shù)據(jù)庫中獲取特定項目,則使用 GetItem()
函數(shù)。
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 中的項目
表格中的所有信息都可以通過掃描訪問。 讀取表中的每一項后,數(shù)據(jù)將由 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 表創(chuàng)建按需備份,請使用 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 表、創(chuàng)建、列出和執(zhí)行其他 CRUD 活動以及執(zhí)行其他維護任務。
到此這篇關于Python 查詢 DynamoDB的文章就介紹到這了,更多相關Python 查詢 DynamoDB內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python-flask調用接口返回中文數(shù)據(jù)問題
這篇文章主要介紹了Python-flask調用接口返回中文數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03