使用boto3创建DynamoDB表
#aws #python #dynamodb #boto3

Amazon DynamoDB 是Amazon Web Services(AWS)提供的全面管理的NOSQL数据库服务。这是一项快速,灵活且可扩展的数据库服务,允许用户以高度可用且耐用的方式存储和检索数据。

boto3 是一个Python库,提供了一个易于使用的界面,可与各种AWS服务进行交互,使开发人员可以自动化任务并将AWS服务集成到其Python应用程序中。

>

现在我们要逐步设置。

Image description

步骤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)

Create Table

之后,转到AWS控制台并搜索DynamoDB。之后,在DynamoDB仪表板中,您可以看到DyanModB表的创建。
Table Create Success

步骤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,
            }
        )

Load data

最后,转到AWS管理控制台,在DynamoDB仪表板中,您可以看到表格添加了以下值。

DynamoDb Dashboard

步骤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))

Add New Values

接下来,转到AWS管理控制台和DynamoDB仪表板中,您可以在仪表板中看到最新的附加值。

AWS DynamoDB Dashboard

步骤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))

Get values

步骤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'])

Run Query

步骤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()

Delete DynamoDB Tables

感谢您阅读文章。