如何使用 python查詢Amazon DynamoDB
本文將討論如何使用 python 查詢 Amazon DynamoDB。 我們還將討論 Boto3 是什么以及它為什么需要查詢 DynamoDB。
DynamoDB 簡(jiǎn)介
DynamoDB 是一種 NoSQL 數(shù)據(jù)庫服務(wù),提供內(nèi)置安全機(jī)制、連續(xù)備份、內(nèi)存緩存和有用的數(shù)據(jù)導(dǎo)入/導(dǎo)出工具。
DynamoDB 在一個(gè) AWS 區(qū)域的不同可用區(qū) (AZ) 之間自動(dòng)復(fù)制數(shù)據(jù),增強(qiáng)了針對(duì)中斷和數(shù)據(jù)丟失的安全性。 DynamoDB 提供了許多安全功能,包括細(xì)粒度訪問控制、靜態(tài)加密和用戶活動(dòng)記錄。
Boto3簡(jiǎn)介
Boto3 是為 Amazon Web Services (AWS) 開發(fā)的內(nèi)置 python 庫。 該庫可用于交互、創(chuàng)建、配置、管理和使用 Amazon 的不同服務(wù),包括 DynamoDB。
安裝和導(dǎo)入 Boto3
要在我們的 Python 工作臺(tái)中安裝 Boto3 庫,請(qǐng)使用以下命令。
pip install boto3
輸出:

代碼:
Import boto3
這會(huì)將 boto3 庫導(dǎo)入到我們的筆記本中。
將 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')請(qǐng)記住,數(shù)據(jù)庫必須已經(jīng)在 AWS DynamoDB 上創(chuàng)建才能通過 Python Boto3 庫連接到它。
使用 Boto3 在 DynamoDB 中創(chuàng)建表
DynamoDB 上的表可以通過多種方式創(chuàng)建。 這包括使用 Amazon CLI、AWS 控制臺(tái)或使用 Boto3。
在這里,我們將按照前面提到的步驟將 Boto3 與我們已經(jīng)連接到的數(shù)據(jù)庫一起使用。 了解 DynamoDB 客戶端和表資源如何變化可以讓您根據(jù)需要使用其中任何一個(gè),因?yàn)樵摫碣Y源可以顯著簡(jiǎn)化某些操作。
開發(fā)人員可以使用 boto3.resource('dynamodb') 資源創(chuàng)建、更新和刪除 DynamoDB 表和所有內(nèi)容。 此資源支持使用條件表達(dá)式和表級(jí)安全性的項(xiàng)目級(jí)安全性。
要對(duì) DynamoDB 數(shù)據(jù)進(jìn)行無服務(wù)器訪問,請(qǐng)將 boto3.resource('dynamodb') 資源與 AWS Lambda 函數(shù)結(jié)合使用。
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)建表需要一些時(shí)間才能激活和顯示。 建議在重試之前稍等片刻,或者我們可以使用服務(wù)員功能讓我們知道表何時(shí)處于活動(dò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 中刪除表非常簡(jiǎn)單。 如果我們改變主意并想從數(shù)據(jù)庫中刪除一個(gè)表,我們需要輸入以下代碼片段。
import boto3
dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
dynamodb.delete_table(
TableName="Movies"
)請(qǐng)記住,我們要?jiǎng)h除的表已經(jīng)存在于數(shù)據(jù)庫中且名稱相同,否則會(huì)給我們一條錯(cuò)誤消息(未找到表)。
通過 Boto3 列出 DynamoDB 中的表
如果我們有興趣查找我們所在地區(qū)所有可用餐桌的列表,我們需要使用 list() 函數(shù)列出該地區(qū)所有可用餐桌。
import boto3
dynamodb = boto3.resource('dynamodb', region_name=region)
tables = list(dynamodb.tables.all())
print(tables)必須確保表的總數(shù)小于 100,否則我們將不得不對(duì)列表進(jìn)行分頁。
通過 Boto3 在 DynamoDB 中分頁
單個(gè)列表調(diào)用返回最多 1MB 項(xiàng)目的結(jié)果。 為了進(jìn)一步上市,我們需要發(fā)出第二個(gè)電話。 如果響應(yīng)對(duì)象中存在 LastEvaluatedKey,則應(yīng)再次調(diào)用 ExclusiveStartKey 以從此表中獲取更多項(xiàng)。
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 只提供了一種對(duì)結(jié)果進(jìn)行排序的方法。 如果您的表格缺少結(jié)果,則您對(duì)項(xiàng)目進(jìn)行排序的能力僅限于在收到結(jié)果后在應(yīng)用程序代碼中這樣做。
但是,您可以使用以下語法以降序或升序使用排序鍵對(duì) DynamoDB 結(jié)果進(jìn)行排序。
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 中獲取項(xiàng)目
如果我們有興趣從 DynamoDB 數(shù)據(jù)庫中獲取特定項(xiàng)目,則使用 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 中的項(xiàng)目
表格中的所有信息都可以通過掃描訪問。 讀取表中的每一項(xiàng)后,數(shù)據(jù)將由 scan() 方法返回。
當(dāng)您添加其他選項(xiàng)(如 FilterExpression)時(shí),表掃描操作可以返回更少的所需結(jié)果。
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 中的全局二級(jí)索引
您可以使用全局二級(jí)索引查詢不包含在主表主鍵中的屬性。 這樣做可以避免全表掃描過程帶來的延遲和低效率。
全局二級(jí)索引也將包括來自主表的屬性,但將使用不同的主鍵進(jìn)行結(jié)構(gòu)化,從而加快查詢速度。
使用 Boto3 備份 DynamoDB 表
要使用 Boto3 為 DynamoDB 表創(chuàng)建按需備份,請(qǐng)使用 create_backup() 方法并將目標(biāo)備份表名稱與表名稱一起傳遞。
import boto3
client = boto3.client('dynamodb')
response = client.create_backup(
TableName='Employees',
BackupName='Employees-Backup-01'
)
print(response)總結(jié)
本文介紹了如何使用 Python Boto3 在 Amazon DynamoDB 上查詢 DynamoDB 表、創(chuàng)建、列出和執(zhí)行其他 CRUD 活動(dòng)以及執(zhí)行其他維護(hù)任務(wù)。
到此這篇關(guān)于Python 查詢 DynamoDB的文章就介紹到這了,更多相關(guān)Python 查詢 DynamoDB內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java Spring項(xiàng)目國(guó)際化(i18n)詳細(xì)方法與實(shí)例
這篇文章主要介紹了Java Spring項(xiàng)目國(guó)際化詳細(xì)方法與實(shí)例,需要的朋友可以參考下2020-03-03
淺談PySpark SQL 相關(guān)知識(shí)介紹
這篇文章主要介紹了淺談PySpark SQL 相關(guān)知識(shí)介紹,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Python-flask調(diào)用接口返回中文數(shù)據(jù)問題
這篇文章主要介紹了Python-flask調(diào)用接口返回中文數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03

