¿Cómo inserto condicionalmente un elemento en una tabla dynamodb usando boto3?

Si tengo una tabla con una clave hash de userId y una clave de rango de productId, ¿cómo pongo un elemento en esa tabla solo si aún no existe usando los enlaces dynamodb de boto3?

La llamada normal a put_item se ve así

table.put_item(Item={'userId': 1, 'productId': 2})

Mi llamada con una ConditionExpression se ve así:

table.put_item(
    Item={'userId': 1, 'productId': 2}, 
    ConditionExpression='userId <> :uid AND productId <> :pid', 
    ExpressionAttributeValues={':uid': 1, ':pid': 3}
)

Pero esto genera una ConditionalCheckFailedException cada vez. Si existe un artículo con el mismo ID de producto o no.

Respuestas a la pregunta(3)

Su respuesta a la pregunta