es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo actualizar un valor en una tabla de DynamoDB basándose en una condición utilizando Python y boto3?

Quiero actualizar el valor actual de fecha en la columna (last_run_date) de DynamoDB basado en las siguientes condiciones:

current_date = datetime.today().strftime(‘%Y-%m-%d %H:%M:%S’)

Condiciones:

  1. kpi_id = KPI038
  2. metric_id = ‘NA’

Nombre de la tabla: CONFIG

Clave de partición: kpi_id

Clave de clasificación: metric_id

Quiero la función para actualizar un elemento en Python utilizando boto3.

El código que intenté:

current_date = datetime.today().strftime('%Y-%m-%d %H:%M:%S')
kpi_id = 'KPI038'
metric_id = 'NA'
return_value = "UPDATED_NEW"
table_name = "kpi_metastore_config"
table = dynamodb.Table(table_name)

def update_dynamodb():

try:
    response = table.update_item(
        Key={
        'kpi_id': kpi_id,
        'metric_id': metric_id
    },
    UpdateExpression="set last_run_date = :r",
    ConditionExpression=("kpi_id = :num") & ("metric_id = :number"),
    ExpressionAttributeValues={
            ':r' :  current_date,
            ':num': kpi_id,
            ':number': metric_id
        },
    ReturnValues=return_value
    )
    return response
except Exception as error:
    logger.error(error)

def lambda_handler(event, context):
    response = update_dynamodb()

if __name__ == '__main__':
    lambda_handler(event,context)

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para actualizar la columna last_run_date en DynamoDB según las condiciones dadas, puedes utilizar el método update_item de la clase boto3.dynamodb.Table. Aquí está el código actualizado:

    import boto3
    from datetime import datetime
    
    current_date = datetime.today().strftime('%Y-%m-%d %H:%M:%S')
    kpi_id = 'KPI038'
    metric_id = 'NA'
    table_name = 'CONFIG'
    return_value = 'UPDATED_NEW'
    
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table(table_name)
    
    def update_dynamodb():
        try:
            response = table.update_item(
                Key={
                    'kpi_id': kpi_id,
                    'metric_id': metric_id
                },
                UpdateExpression='set last_run_date = :r',
                ConditionExpression='kpi_id = :num and metric_id = :m',
                ExpressionAttributeValues={
                    ':r': current_date,
                    ':num': kpi_id,
                    ':m': metric_id
                },
                ReturnValues=return_value
            )
            return response
        except Exception as error:
            print(error)
    
    def main():
        response = update_dynamodb()
        print(response)
    
    if __name__ == '__main__':
        main()
    

    Esto es lo nuevo en este código:

    • Se importa la biblioteca boto3 al comienzo del archivo.
    • Se crea el recurso dynamodb utilizando boto3.resource('dynamodb').
    • La variable table se inicializa con el método dynamodb.Table(table_name).
    • La función update_dynamodb() se ha actualizado para utilizar el método table.update_item() con los parámetros adecuados.
    • El parámetro ConditionExpression ahora incluye ambas condiciones.
    • Se ha agregado la función main() para ejecutar la función update_dynamodb().
    • El bloque if __name__ == '__main__': se ha actualizado para llamar a la función main().

Comments are closed.