Crud DynamoDb

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

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

에제르치시오



Vamos almacenar los resultados de los partidos de futbol de una o mas ligas.

요구 사항:
  • Tener una cueenta de AWS
  • Tener configuradas las credenciales de AWS en la maquina(en la consola de mac o linux ejecutar AWS configure para definir el Access key ID). Se utiliza este metodo solo por ser 'practico', no es consejable productivo para.entorn
  • Tener instalado python y la libreria boto3(pip install boto3)

  • 편집자

    비주얼 스튜디오 코드

    1) Inicialmente se debe importar la librería de boto3 e iniciar el recurso 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 Partition Key Liga (tipo string) y la Sort Key Partido (tipo string)

    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 League, jugado 2021년 9월 26일

    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 Manchester City, el resultado final fue: Chelsea 0 - 1 Manchester City. 실제 데이터에 대한 정보 제공에 대한 정보 제공

    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 importante tener en cueenta, para las realizaciones se debe usar siempre el Partition Key y el Sort Key siempre y cuando este ultimo se haya definido en la tabla.

    5) Como nuestra base de datos tiene muy poca información, vamos a registrar mas resultados.

    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: escribir o borrar muchos datos de manera eficiente.

    6)Ahora vamos a Consultar 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'}
    )
    


    ProjectionExpression: Se utiliza para definir que columnas va a retornar la Consulta
    ExpressionAttributeNames: las columnas의 별칭을 정의하는 데 사용됩니다.

    En este caso se utiliza el alias #L para la columna Local ya que Local es una palabra reservada de DynamoDB

    7)Ahora queremos traer un partido especifico 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 este paso vamos a traer los partido por una fecha especifica.

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


    9) CRUD vamos a eliminar un partido de nuestra tabla.

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


    삭제_항목에 대한 세부적인 정의는 파티션 키와 정렬 키의 정의에 따라 결정됩니다.

    참조



    Boto3
    Documentación DynamoDB

    Me pueden encontrar ko

    좋은 웹페이지 즐겨찾기