Рубрики
Без рубрики

Crud Dynamodb

Dynamodb me parece una buena opción para utilizar una base de datos (no relacional) en la … с меткой Dynamodb, AWS, Boto3, Python.

Dynamodb me parece una buena opción para utilizar una base de datos (no relacional) en la nube.

Dynamodb se puede utilizar en diestentes tamaños de proyectos desde proyectos pequeños a muy grandes, con todas son bondades de tiempos de respuesta bajos y gran escalabilidad.

Ejercicio

Vamos A Almacenar Los ResultAdos de los partidos de futbol de una o mas ligas.

Requisitos:

  • Tener una cuenta de aws
  • Tener Configuradas las credenciales de aws en la maquina (en la consola de mac o linux ejecutar aws configure para deginir el eccess id) .se utiliza este método solo por ‘rackico’, нет esconsejable para ornornos proformivos.
  • Tener Instalado Python y la libreria boto3 (Pip install Boto3)

редактор

Visual Studio Code

1) Inicialmente se debe imampormar librería de boto3 e iniciar el recurco para La utilización de Dynamodb

import boto3
from boto3.dynamodb.conditions import Key
dynamodb = boto3.resource("dynamodb")


2) Creación de la tabla Partidosfutbol con la разделение ключа Лига (строка Tipo) y la sort key Партидо (строка Tipo)

dynamodb.create_table(
        TableName='PartidosFutbol',
        KeySchema=[
            {
                'AttributeName': 'Liga',
                'KeyType': 'HASH'  # Partition key
            },
            {
                'AttributeName': 'Partido',
                'KeyType': 'RANGE'  # Sort key
            }
        ],
        #Se deben crear las llaves nuevamente con su tipo de dato
        AttributeDefinitions=[
            {
                'AttributeName': 'Liga',
                'AttributeType': 'S'  # Se utiliza S para tipos de datos String y N para numeros
            },
            {
                'AttributeName': 'Partido',
                'AttributeType': 'S'
            }

        ],
        ProvisionedThroughput={
            'ReadCapacityUnits': 5,
            'WriteCapacityUnits': 5
        }
    )

3) Vamos A Ingresar el Resultado de un partido de futbol Chelsea 1 – 2 Machester City De La Premier, Jugado EL 26/09/2021

table = dynamodb.Table("PartidosFutbol")
table.put_item(Item={
    "Liga": "Premier League#2021/22",
    "Partido":"Chelsea#Manchester City#2021/09/26",
    "Local":"Chelsea",
    "Visitante":"Manchester City",
    "MarcadorLocal":1,
    "MarcadorVisitante": 2,
    "Fecha":"2021/09/26"

})

4) Revisando el Resultado Final No Fue Chelsea 1 – 2 Манчестер Сити, El Resultado Final Fu: Челси 0 – 1 Манчестер Сити. Por lo tanto debemos actustizar la información en nuestra base de datos.

table.update_item(
                Key={
                    "Liga": "Premier League#2021/22",
                    "Partido": "Chelsea#Manchester City#2021/09/26"
                },
                UpdateExpression="set MarcadorVisitante=:marcador_visitante,MarcadorLocal=:marcador_local",
                ExpressionAttributeValues={
                    ":marcador_visitante":1,
                    ":marcador_local":0
                },
                ReturnValues="UPDATED_NEW"
            )

ES ВАЖНЫЕ ТЕНЕР EN CUENTA, Para las Actualizaciones se debe usar siempre el раздел.

5) Como Nuestra Base de Datos Tiene Muy Poca Información, VAMOS ASERISTRAR MAS RESSUTADOS.

partidos = []
partido1 = {"Liga": "Premier League#2021/22","Partido":"Arsenal#Tottenham Hotspur#2021/09/26","Local":"Arsenal","Visitante":"Tottenham","MarcadorLocal":3,"MarcadorVisitante": 1,"Fecha":"2021/09/25"}
partido2 = {"Liga": "LaLiga#2021/22","Partido":"Athletic Bilbao#Rayo Vallecano#2021/09/21","Local":"Athletic Bilbao","Visitante":"Rayo Vallecano","MarcadorLocal":1,"MarcadorVisitante": 2,"Fecha":"2021/09/21"}
partidos.append(partido1)
partidos.append(partido2)
with table.batch_writer() as batch:
    for p in partidos:
        content = {
            "Liga": p["Liga"],
            "Partido":p["Partido"],
            "Local":p["Local"],
            "Visitante":p["Visitante"],
            "MarcadorLocal":p["MarcadorLocal"],
            "MarcadorVisitante": p["MarcadorVisitante"],
            "Fecha":p["Fecha"]
        }
        batch.put_item(Item=content)

Batch_writer : nos sirve para escribir o borrar mucos datos de manera eficiente.

6) Ahora Vamos Консультант Los Partidos de La Liga Inglesa.

table.query(KeyConditionExpression=Key('Liga').eq("Premier League#2021/22"),                   
                        ProjectionExpression="table.query(KeyConditionExpression=Key('Liga').eq("Premier League#2021/22"),                   
                        ProjectionExpression="#L,MarcadorLocal,Visitante,MarcadorVisitante",
                        ExpressionAttributeNames = {'#L': 'Local'}
),MarcadorLocal,Visitante,MarcadorVisitante",
                        ExpressionAttributeNames = {'#L': 'Local'}
)

ProtectionExpression : Se utiliza para definer que colunas va a retornar la consulta ExpressionAttributeNames : Se utiliza para deconir los псевдоним de las columnas

En ese caso se utiliza el alias # L para la columna local ya que Местный ES una palabra Reservada de Dynamodb

7) ahora Queremos traer un partido Operififico de la Liga Española.

table.query(KeyConditionExpression=Key('Liga').eq("LaLiga#2021/22") & Key("Partido").eq("Athletic Bilbao#Rayo Vallecano#2021/09/21")
)

8) en ese paso vamos a traer los partido por una fecha eppicifica.

table.query(KeyConditionExpression=Key('Liga').eq("Premier League#2021/22"),                   
                        FilterExpression= 'Fecha = :Fecha',
                        ExpressionAttributeValues= { 
                        ':Fecha': '2021/09/25'
                        }
)

9) Como ultimo paso de nuestro Crud Вамос Элиминар ООН ПАРТИДО ДЕ НУЕСТРА Табла.

table.delete_item(
            Key={
                'Liga': "Premier League#2021/22",
                "Partido":"Chelsea#Manchester City#2021/09/26"
            },
            ConditionExpression="MarcadorLocal = :marcador_local and MarcadorVisitante =:marcador_visante",
            ExpressionAttributeValues={
                ":marcador_local": 0,
                ":marcador_visante": 1,
            }
        )

Para el caso de delete_item SE Debe Offifificar La Разделение Key Y El Core Key Siempre y Cuando Este ultimo se haya defineido en la tabla.

Boto3 DocumentAción DynamoDB

Я pueden encontrar en

Камило Кабралес

Оригинал: “https://dev.to/cecamilo/crud-dynamodb-1d9j”