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.

DynamoDB FilterExpression con ‘NOT EXIST’ como condición en boto3.

Estoy tratando de realizar un escaneo de tabla dynamodb con una expresión de filtro. La expresión de filtro actual tiene una condición de begins_with algo como:

import os
import boto3
from boto3.dynamodb.conditions import Attr

env_id = os.environ['ENVIRONMENT']
buId   = '10014'

<h1>Define the table</h1>

table = boto3.resource('dynamodb').Table(env_id+'-abcd')

response = table.scan(
    ProjectionExpression='#SubsId,#ItemId,#SeqNum',
    ExpressionAttributeNames={
        '#SubsId' : 'SubsId', # clave de partición
        '#ItemId' : 'ItemId', # clave de ordenamiento
        '#SeqNum' : 'SeqNum'  # número de secuencia
    },
    FilterExpression=Attr('SubsId').begins_with(buId) AND //SeqNum No Existe
)

En la expresión de filtro, quiero verificar si
<SeqNum No Existe

¿Alguien puede ayudarme con cómo puedo agregar eso después de la condición AND en el código anterior?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede agregar la condición “SeqNum No Existe” a FilterExpression utilizando la función “AttributeNotExists” de la clase condiciones de boto3.dynamodb. Así es cómo puede modificar su código:

    import os
    import boto3
    from boto3.dynamodb.conditions import Attr, AttributeNotExists
    
    env_id = os.environ['ENVIRONMENT']
    buId   = '10014'
    
    # Definir la tabla
    table = boto3.resource('dynamodb').Table(env_id+'-abcd')
    
    respuesta = table.scan(
        ProjectionExpression='#SubsId,#ItemId,#SeqNum',
        ExpressionAttributeNames={
            '#SubsId' : 'SubsId', # clave de partición
            '#ItemId' : 'ItemId', # clave de ordenamiento
            '#SeqNum' : 'SeqNum'  # número de secuencia
        },
        FilterExpression=Attr('SubsId').begins_with(buId) & AttributeNotExists('SeqNum')
    )
    

    En el código actualizado, se utiliza el operador “&” para agregar la nueva condición a la expresión de filtro existente. La función “AttributeNotExists” toma el nombre del atributo como argumento y devuelve una condición que verifica si el atributo no existe.

Comments are closed.