Todos los productos
Search
Centro de documentos

Tablestore:Use conditional updates

Última actualización: Sep 03, 2026

Utilice Tablestore SDK for Python para agregar condiciones a las operaciones de inserción, actualización o eliminación de filas. De este modo, la operación se ejecuta únicamente si la fila destino cumple con dichas condiciones.

Requisitos previos

Instale Tablestore SDK for Python e inicialice un cliente.

Descripción de la función

Utilice Condition para especificar una condición de existencia de fila y una condición de valor de columna de atributo. Pase la condición a put_row, update_row, delete_row o a la operación por lotes de filas correspondiente. Si no se cumple la condición, el servidor devuelve un error y no modifica la fila.

Condition(row_existence_expectation, column_condition=None)

En el siguiente ejemplo se actualiza la columna de atributo status solo si la fila destino existe.

primary_key = [("partition", "device"), ("id", 1)]
row = Row(primary_key, {"PUT": [("status", "online")]})
condition = Condition(RowExistenceExpectation.EXPECT_EXIST)

consumed, return_row = client.update_row(
    "example_table",
    row,
    condition,
)

Parámetros

Condición de actualización

Condition contiene los siguientes parámetros.

Nombre

Tipo

Descripción

row_existence_expectation (obligatorio)

RowExistenceExpectation

La condición de existencia de la fila. IGNORE omite la comprobación de existencia de la fila. EXPECT_EXIST se cumple si la fila existe. EXPECT_NOT_EXIST se cumple si la fila no existe.

column_condition (opcional)

ColumnCondition

La condición de valor de la columna de atributo. Se admiten SingleColumnCondition, SingleColumnRegexCondition y CompositeColumnCondition.

Condición de valor de columna única

Llame a SingleColumnCondition(column_name, column_value, comparator, pass_if_missing=True, latest_version_only=True) para crear una condición de valor de columna única.

Nombre

Tipo

Descripción

column_name (obligatorio)

str

El nombre de la columna de atributo que se va a evaluar.

column_value (obligatorio)

str, int, bytes, float o bool

El valor destino. Su tipo debe coincidir con el tipo de valor de la columna de atributo.

comparator (obligatorio)

ComparatorType

El operador de comparación. Los valores válidos son EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_EQUAL, LESS_THAN y LESS_EQUAL.

pass_if_missing (opcional)

bool

Especifica si la condición se cumple cuando falta la columna de atributo destino. Valor predeterminado: True. Si este parámetro es False, la condición no se cumple cuando falta la columna.

latest_version_only (opcional)

bool

Especifica si se evalúa únicamente la versión más reciente. Valor predeterminado: True. Si este parámetro es False, la condición se cumple si coincide cualquier versión.

Condición de expresión regular de columna única

Llame a SingleColumnRegexCondition(column_name, comparator, column_value=None, regex_rule=None, latest_version_only=True) para crear una condición de expresión regular de columna única. Solo las columnas de atributo de tipo cadena admiten condiciones de expresión regular.

Nombre

Tipo

Descripción

column_name (obligatorio)

str

El nombre de la columna de atributo de tipo cadena que se va a evaluar.

comparator (obligatorio)

ComparatorType

El operador de comparación. Los valores válidos son EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_EQUAL, LESS_THAN, LESS_EQUAL, EXIST y NOT_EXIST.

column_value (opcional)

str, int o float

El valor destino. Omita este parámetro si comparator es EXIST o NOT_EXIST. En caso contrario, este parámetro es obligatorio. Si se omite regex_rule, el tipo debe coincidir con el tipo de valor de la columna de atributo. Si se especifica regex_rule, el tipo debe coincidir con regex_rule.cast_type.

regex_rule (opcional)

RegexRule

La regla de extracción de subcadenas y conversión de tipos. Si se omite este parámetro, el valor de la columna de atributo se compara directamente.

latest_version_only (opcional)

bool

Especifica si se evalúa únicamente la versión más reciente. Valor predeterminado: True. Si este parámetro es False, la condición se cumple si coincide cualquier versión.

Si falta la columna de atributo destino, una condición de expresión regular de columna única nunca se cumple. No es posible configurar pass_if_missing por separado para esta condición.

Regla de expresión regular

El parámetro regex_rule es del tipo RegexRule y contiene los siguientes parámetros.

Nombre

Tipo

Descripción

regex_input (obligatorio)

str

La expresión regular, de hasta 256 bytes. Se admiten expresiones compatibles con Perl y caracteres de un solo byte. No se admiten caracteres chinos. Si la expresión contiene grupos de captura, se extrae el primer grupo. De lo contrario, se extrae toda la coincidencia.

cast_type (obligatorio)

CastType

El tipo al que se convierte el valor extraído. Los valores válidos son VT_STRING, VT_INTEGER y VT_DOUBLE. La condición no se cumple si el valor extraído no se puede convertir.

Condición de valor de columna compuesta

Llame a CompositeColumnCondition(combinator) para crear una condición de valor de columna compuesta y, a continuación, llame a add_sub_condition para agregar condiciones.

Nombre

Tipo

Descripción

combinator (obligatorio)

LogicalOperator

El operador lógico. Los valores válidos son AND, OR y NOT.

sub_conditions (obligatorio)

List[ColumnCondition]

Las condiciones que se van a combinar. Se admiten condiciones de valor de columna única, condiciones de expresión regular de columna única y condiciones compuestas anidadas, con un máximo de 32 condiciones.

Ejemplos

Uso de una condición de valor de columna única

En el siguiente ejemplo se actualizan los datos solo si la fila destino existe y el valor más reciente de la columna de atributo status es pending. La condición no se cumple si falta la columna.

column_condition = SingleColumnCondition(
    "status",
    "pending",
    ComparatorType.EQUAL,
    pass_if_missing=False,
)
condition = Condition(
    RowExistenceExpectation.EXPECT_EXIST,
    column_condition,
)

client.update_row("example_table", row, condition)

Combinación de condiciones de valor de columna

En el siguiente ejemplo se construye la condición (status == "pending" AND revision == 1) OR priority > 5.

status_and_revision = CompositeColumnCondition(LogicalOperator.AND)
status_and_revision.add_sub_condition(
    SingleColumnCondition("status", "pending", ComparatorType.EQUAL)
)
status_and_revision.add_sub_condition(
    SingleColumnCondition("revision", 1, ComparatorType.EQUAL)
)

column_condition = CompositeColumnCondition(LogicalOperator.OR)
column_condition.add_sub_condition(status_and_revision)
column_condition.add_sub_condition(
    SingleColumnCondition("priority", 5, ComparatorType.GREATER_THAN)
)
condition = Condition(RowExistenceExpectation.EXPECT_EXIST, column_condition)

Implementación de bloqueo optimista con CAS

En el siguiente ejemplo se lee el valor actual de revision y se utiliza como condición de actualización. La revisión se incrementa solo si otra solicitud no ha modificado los datos.

primary_key = [("partition", "device"), ("id", 1)]
consumed, current_row, next_token = client.get_row(
    "example_table",
    primary_key,
    columns_to_get=["revision"],
)
old_revision = current_row.attribute_columns[0][1]

row = Row(primary_key, {"PUT": [("revision", old_revision + 1)]})
column_condition = SingleColumnCondition(
    "revision",
    old_revision,
    ComparatorType.EQUAL,
    pass_if_missing=False,
    latest_version_only=True,
)
condition = Condition(RowExistenceExpectation.EXPECT_EXIST, column_condition)

client.update_row("example_table", row, condition)