Tous les produits
Search
Centre de documentation

Tablestore:Use conditional updates

Dernière mise à jour :Aug 18, 2026

Utilisez le SDK Tablestore pour Python afin d'ajouter des conditions aux opérations d'insertion (put), de mise à jour ou de suppression de lignes. L'opération ne s'exécute que si la ligne cible remplit les conditions spécifiées.

Prérequis

Installez le SDK Tablestore pour Python et initialisez un client.

Description de la fonctionnalité

Utilisez l'objet Condition pour spécifier une condition d'existence de ligne et une condition sur la valeur d'une colonne d'attribut. Transmettez cette condition à put_row, update_row, delete_row ou à l'opération par lot correspondante. Si la condition n'est pas remplie, le serveur renvoie une erreur et ne modifie pas la ligne.

Condition(row_existence_expectation, column_condition=None)

L'exemple suivant met à jour la colonne d'attribut status uniquement si la ligne cible 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,
)

Paramètres

Condition de mise à jour

L'objet Condition contient les paramètres suivants.

Nom

Type

Description

row_existence_expectation (obligatoire)

RowExistenceExpectation

La condition d'existence de la ligne. La valeur IGNORE ignore la vérification de l'existence de la ligne. La valeur EXPECT_EXIST est satisfaite si la ligne existe. La valeur EXPECT_NOT_EXIST est satisfaite si la ligne n'existe pas.

column_condition (facultatif)

ColumnCondition

La condition sur la valeur de la colonne d'attribut. Les types SingleColumnCondition, SingleColumnRegexCondition et CompositeColumnCondition sont pris en charge.

Condition de valeur sur une seule colonne

Appelez SingleColumnCondition(column_name, column_value, comparator, pass_if_missing=True, latest_version_only=True) pour créer une condition de valeur sur une seule colonne.

Nom

Type

Description

column_name (obligatoire)

str

Le nom de la colonne d'attribut à évaluer.

column_value (obligatoire)

str, int, bytes, float ou bool

La valeur cible. Son type doit correspondre au type de valeur de la colonne d'attribut.

comparator (obligatoire)

ComparatorType

L'opérateur de comparaison. Les valeurs valides sont EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_EQUAL, LESS_THAN et LESS_EQUAL.

pass_if_missing (facultatif)

bool

Indique si la condition est considérée comme satisfaite lorsque la colonne d'attribut cible est absente. Valeur par défaut : True. Si ce paramètre est défini sur False, la condition n'est pas satisfaite lorsque la colonne est manquante.

latest_version_only (facultatif)

bool

Indique s'il faut évaluer uniquement la dernière version. Valeur par défaut : True. Si ce paramètre est défini sur False, la condition est satisfaite si n'importe quelle version correspond.

Condition d'expression régulière sur une seule colonne

Appelez SingleColumnRegexCondition(column_name, comparator, column_value=None, regex_rule=None, latest_version_only=True) pour créer une condition d'expression régulière sur une seule colonne. Seules les colonnes d'attribut de type chaîne prennent en charge les conditions d'expression régulière.

Nom

Type

Description

column_name (obligatoire)

str

Le nom de la colonne d'attribut de type chaîne à évaluer.

comparator (obligatoire)

ComparatorType

L'opérateur de comparaison. Les valeurs valides sont EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_EQUAL, LESS_THAN, LESS_EQUAL, EXIST et NOT_EXIST.

column_value (facultatif)

str, int ou float

La valeur cible. Omettez ce paramètre si comparator est défini sur EXIST ou NOT_EXIST. Dans les autres cas, ce paramètre est obligatoire. Si regex_rule est omis, le type doit correspondre au type de valeur de la colonne d'attribut. Si regex_rule est spécifié, le type doit correspondre à regex_rule.cast_type.

regex_rule (facultatif)

RegexRule

La règle d'extraction de sous-chaîne et de conversion de type. Si ce paramètre est omis, la valeur de la colonne d'attribut est comparée directement.

latest_version_only (facultatif)

bool

Indique s'il faut évaluer uniquement la dernière version. Valeur par défaut : True. Si ce paramètre est défini sur False, la condition est satisfaite si n'importe quelle version correspond.

Si la colonne d'attribut cible est manquante, une condition d'expression régulière sur une seule colonne n'est jamais satisfaite. Le paramètre pass_if_missing ne peut pas être configuré séparément pour cette condition.

Règle d'expression régulière

Le paramètre regex_rule est de type RegexRule et contient les paramètres suivants.

Nom

Type

Description

regex_input (obligatoire)

str

L'expression régulière, limitée à 256 octets. Les expressions compatibles Perl et les caractères mono-octet sont pris en charge. Les caractères chinois ne sont pas pris en charge. Si l'expression contient des groupes de capture, le premier groupe est extrait. Sinon, la correspondance entière est extraite.

cast_type (obligatoire)

CastType

Le type vers lequel la valeur extraite est convertie. Les valeurs valides sont VT_STRING, VT_INTEGER et VT_DOUBLE. La condition n'est pas satisfaite si la valeur extraite ne peut pas être convertie.

Condition de valeur composite

Appelez CompositeColumnCondition(combinator) pour créer une condition de valeur composite, puis appelez add_sub_condition pour ajouter des conditions.

Nom

Type

Description

combinator (obligatoire)

LogicalOperator

L'opérateur logique. Les valeurs valides sont AND, OR et NOT.

sub_conditions (obligatoire)

List[ColumnCondition]

Les conditions à combiner. Les conditions de valeur sur une seule colonne, les conditions d'expression régulière sur une seule colonne et les conditions composites imbriquées sont prises en charge, avec un maximum de 32 conditions.

Exemples

Utiliser une condition de valeur sur une seule colonne

L'exemple suivant met à jour les données uniquement si la ligne cible existe et si la dernière valeur de la colonne d'attribut status est pending. La condition n'est pas satisfaite si la colonne est manquante.

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)

Combiner des conditions de valeur sur les colonnes

L'exemple suivant construit la condition (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)

Implémenter le verrouillage optimiste avec CAS

L'exemple suivant lit la valeur actuelle de revision et l'utilise comme condition de mise à jour. La révision n'est incrémentée que si aucune autre requête n'a modifié les données.

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)