boto3 dynamodb подключается к локальным или удаленным экземплярам

#docker #amazon-dynamodb #boto3 #amazon-dynamodb-local

#docker #amazon-dynamodb #boto3 #amazon-dynamodb-local

Вопрос:

Для всех,

Я новичок в python, и у меня есть локальная среда docker docker DynamoDB, но я хотел создать класс, который позволяет мне перечислять таблицы или создавать таблицы, например, в моем локальном docker dynamodb или aws dynamo db.

 import boto3

class DDB():

    def __init__(self):
        print("Welcome to the DynamoDB py")
    
    def ddbconnect(self,env):
        self.env = env 
        if self.env == "l":
            client = boto3.client('dynamodb',endpoint_url='http://localhost:8000')
            return env
        else:
            client = boto3.client('dynamodb')
            return env
            
    def ddbcreateTable(self,tbname,pk,sk):
        
        createResponse = client.create_table(
            AttributeDefinitions=[
                {
                    'AttributeName': pk,
                    'AttributeType': 'S',
                }, 
                {
                    'AttributeName': sk,
                    'AttributeType':'N'
                }
            ], 
            KeySchema=[
                {
                    'AttributeName': pk,
                    'KeyType':'HASH'
                },
                {
                    'AttributeName': sk,
                    'KeyType':'RANGE'
                },
            ],
            BillingMode = 'PAY_PER_REQUEST',
            TableName=tbname
        )

mydb=DDB()

env = input("enter L if it is a Local Dynamodb")
if env.lower() == "l":
    mydb.ddbconnect(env)
    
    while True:
        prompt = input("Choices are (C)reate or (L)ist Table or (E)xit -  L | C | E  : " )
        if prompt.lower() == "l":
        env=input()
        mydb.ddblist()
        continue
    elif prompt.lower() == "c":
        tbname=input("Enter the table name: ")
        pk=input("Enter the primary key: ")
        sk=input("Enter the sort key w/ numberic attribute: ")
        mydb.ddbcreateTable(tbname,pk,sk)
        continue
    elif prompt.lower() == "e" :
        print("Exiting")
        break
    else:
        print("Enter a valid selection")
        continue
  

Я уверен, что есть более эффективный способ записи, но это своего рода логика

Комментарии:

1. С какой проблемой вы столкнулись? Вызывает ли это ошибку в какой-либо среде?

2. Несколько вещей. Ваши отступы неверны в вашем цикле while. Кроме того, если я выбираю C для создания таблицы, он вызывает ddbcreateTable, но он никогда не вызывает ddbconnect, который установил бы соединение с DynamoDB. Итак, здесь вы видите довольно много проблем.

3. Я пытался создать класс существующего кода, который я создал.