Amazon DynamoDB 是Amazon Web Services(AWS)提供的全面管理的NOSQL数据库服务。这是一项快速,灵活且可扩展的数据库服务,允许用户以高度可用且耐用的方式存储和检索数据。
boto3 是一个Python库,提供了一个易于使用的界面,可与各种AWS服务进行交互,使开发人员可以自动化任务并将AWS服务集成到其Python应用程序中。
>现在我们要逐步设置。
步骤1 - 转到AWS管理控制台,创建一个云9环境并创建一个空文件夹。您也可以将此GitHub存储库用于克隆文件。
git Repo
步骤2 - 创建一个名为 bookstablecreate.py 的新文件,并粘贴此内容以创建DynamoDB表。在此之后,运行python BooksTableCreate.py
命令运行此文件。
bookstablecreate.py
import boto3
dynamodb = boto3.resource('dynamodb', region_name='us-east-2')
table = dynamodb.create_table(
TableName='Books',
KeySchema=[
{
'AttributeName': 'year',
'KeyType': 'HASH' #Partition_key
},
{
'AttributeName': 'title',
'KeyType': 'RANGE' #Sort_key
}
],
AttributeDefinitions=[
{
'AttributeName': 'year',
'AttributeType': 'N'
},
{
'AttributeName': 'title',
'AttributeType': 'S'
},
],
ProvisionedThroughput={
'ReadCapacityUnits': 10,
'WriteCapacityUnits': 10
}
)
print("Table status:", table.table_status)
之后,转到AWS控制台并搜索DynamoDB。之后,在DynamoDB仪表板中,您可以看到DyanModB表的创建。
步骤3 - 创建一个称为 bookdata.json 并粘贴以下内容的文件。
bookdata.json
[
{
"year": 2023,
"title": "DevSecOps",
"info": {
"release_date": "2023-01-03",
"rank": 2,
"authors": [
"Daniel Bruhl",
"Chris Hemsworth",
"Olivia Wilde"
]
}
},
{
"year": 2022,
"title": "IaaS Tools",
"info": {
"release_date": "2022-12-01",
"rank": 3,
"authors": [
"Daniel Bruhl",
"Chris Hemsworth",
"Olivia Wilde"
]
}
}
]
之后,创建 booksloaddata.py 文件并粘贴以下内容。最后,运行python BooksLoadData.py
命令进行执行。
booksloaddata.py
import boto3
import json
import decimal
dynamodb = boto3.resource('dynamodb', region_name='us-east-2')
table = dynamodb.Table('Books')
with open("bookdata.json") as json_file:
books = json.load(json_file, parse_float = decimal.Decimal)
for book in books:
year = int(book['year'])
title = book['title']
info = book['info']
print("Add Book:", year, title)
table.put_item(
Item={
'year': year,
'title': title,
'info': info,
}
)
最后,转到AWS管理控制台,在DynamoDB仪表板中,您可以看到表格添加了以下值。
步骤4 - 接下来,向表添加新内容。创建 addNewbook.py 文件,然后添加以下内容。在此之后运行python AddNewBook.py
命令。
addnewbook.py
import boto3
import json
import decimal
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
if abs(o) % 1 > 0:
return float(o)
else:
return int(o)
return super(DecimalEncoder, self).default(o)
dynamodb = boto3.resource('dynamodb', region_name='us-east-2')
table = dynamodb.Table('Books')
title = "Docker"
year = 2019
response = table.put_item(
Item={
'year': year,
'title': title,
'info': {
"release_date": "2029-12-01",
"rank": 5,
"authors": "Daniel Bruhl"
}
}
)
print("Add New Book:")
print(json.dumps(response, indent=4, cls=DecimalEncoder))
接下来,转到AWS管理控制台和DynamoDB仪表板中,您可以在仪表板中看到最新的附加值。
步骤5 - 接下来,从表中获取值。接下来,创建一个 readbook.py 文件,并添加以下值。运行python ReadBook.py
命令。
readbook.py
import boto3
import json
import decimal
from boto3.dynamodb.conditions import Key, Attr
from botocore.exceptions import ClientError
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
if o % 1 > 0:
return float(o)
else:
return int(o)
return super(DecimalEncoder, self).default(o)
dynamodb = boto3.resource("dynamodb", region_name='us-east-2')
table = dynamodb.Table('Books')
title = "DevSecOps"
year = 2023
try:
response = table.get_item(
Key={
'year': year,
'title': title
}
)
except ClientError as e:
print(e.response['Error']['Message'])
else:
item = response['Item']
print("GetBook")
print(json.dumps(item, indent=4, cls=DecimalEncoder))
步骤6 - 接下来,查询值。创建 booksquery.py 并添加以下值。运行python BooksQuery.py
命令。
booksquery.py
import boto3
import json
import decimal
from boto3.dynamodb.conditions import Key, Attr
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
if o % 1 > 0:
return float(o)
else:
return int(o)
return super(DecimalEncoder, self).default(o)
dynamodb = boto3.resource('dynamodb', region_name='us-east-2')
table = dynamodb.Table('Books')
print("Books From 2023")
response = table.query(
KeyConditionExpression=Key('year').eq(2023)
)
for i in response['Items']:
print(i['year'], ":", i['title'])
步骤7 - 最后,删除Dyanamodb表。因为它有助于节省我们的成本。以及删除Cloud9环境。创建DeleteTable.py并添加以下值。接下来,运行python deletetable.py命令。
deletetable.py
import boto3
dynamodb = boto3.resource('dynamodb', region_name='us-east-2')
table = dynamodb.Table('Books')
table.delete()
感谢您阅读文章。