すべてのプロダクト
Search
ドキュメントセンター

Tablestore:条件付き更新の使用

最終更新日:Aug 05, 2026

Tablestore SDK for Python を使用して、行の put、update、または delete 操作に条件を追加し、ターゲット行が条件を満たす場合にのみ操作が実行されるようにします。

前提条件

Tablestore SDK for Python をインストールし、クライアントを初期化します。

機能の説明

Condition を使用して、行の存在条件と属性列の値の条件を指定します。 この条件を put_rowupdate_rowdelete_row、または対応するバッチ行操作に渡します。条件が満たされない場合、サーバーからエラーが返され、行は変更されません。

Condition(row_existence_expectation, column_condition=None)

次の例では、ターゲット行が存在する場合にのみ、status 属性列を更新します。

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,
)

パラメーター

更新条件

Condition には、次のパラメーターがあります。

名前

説明

row_existence_expectation (必須)

RowExistenceExpectation

行の存在条件。 IGNORE は、行の存在チェックをスキップします。 EXPECT_EXIST は、行が存在する場合に条件を満たします。 EXPECT_NOT_EXIST は、行が存在しない場合に条件を満たします。

column_condition (任意)

ColumnCondition

属性列の値の条件。SingleColumnConditionSingleColumnRegexCondition、および CompositeColumnCondition がサポートされています。

単一列の値の条件

SingleColumnCondition(column_name, column_value, comparator, pass_if_missing=True, latest_version_only=True) を呼び出して、単一列の値の条件を作成します。

名前

説明

column_name (必須)

str

評価する属性列の名前。

column_value (必須)

strintbytesfloat、または bool

ターゲット値。 型は属性列の値の型と一致する必要があります。

comparator (必須)

ComparatorType

比較演算子。有効な値は EQUALNOT_EQUALGREATER_THANGREATER_EQUALLESS_THAN、および LESS_EQUAL です。

pass_if_missing (任意)

bool

ターゲット属性列が存在しない場合に条件が満たされるかどうかを指定します。 デフォルト値: True。 このパラメーターが False の場合、列が存在しないと条件は満たされません。

latest_version_only (任意)

bool

最新バージョンのみを評価するかどうかを指定します。デフォルト値: True。このパラメーターが False の場合、いずれかのバージョンが一致すれば条件が満たされます。

単一列の正規表現条件

SingleColumnRegexCondition(column_name, comparator, column_value=None, regex_rule=None, latest_version_only=True) を呼び出して、単一列の正規表現条件を作成します。 文字列型の属性列のみが正規表現条件をサポートしています。

名前

説明

column_name (必須)

str

評価する文字列型の属性列の名前。

comparator (必須)

ComparatorType

比較演算子。有効な値は EQUALNOT_EQUALGREATER_THANGREATER_EQUALLESS_THANLESS_EQUALEXIST、および NOT_EXIST です。

column_value (任意)

strint、または float

ターゲット値は、comparatorEXIST または NOT_EXIST の場合は省略し、それ以外の場合は必須です。regex_rule が省略された場合、型は属性列の値の型と一致する必要があります。regex_rule が指定されている場合、型は regex_rule.cast_type と一致する必要があります。

regex_rule (任意)

RegexRule

部分文字列の抽出と型変換のルール。 このパラメーターを省略した場合、属性列の値を直接比較します。

latest_version_only (任意)

bool

最新バージョンのみを評価するかどうかを指定します。デフォルト値: True。このパラメーターが False の場合、いずれかのバージョンが一致すると条件が満たされます。

対象の属性カラムが欠落している場合、単一カラムの正規表現条件が満たされることはありません。 pass_if_missing は、この条件に対して個別に設定することはできません。

正規表現ルール

regex_rule パラメーターは RegexRule 型で、次のパラメーターが含まれています。

名前

説明

regex_input (必須)

str

正規表現。 最大 256 バイト。 Perl 互換の表現と 1 バイト文字に対応しています。 中国語の文字には対応していません。 式にキャプチャグループが含まれている場合、最初のグループを抽出します。 それ以外の場合は、一致全体を抽出します。

cast_type (必須)

CastType

抽出された値の変換先の型。有効な値は VT_STRINGVT_INTEGER、および VT_DOUBLE です。抽出された値が変換できない場合、条件は満たされません。

複合列値条件

CompositeColumnCondition(combinator) を呼び出して複合列値条件を作成し、次に add_sub_condition を呼び出して条件を追加します。

名前

説明

combinator (必須)

LogicalOperator

論理演算子。有効な値は ANDOR、および NOT です。

sub_conditions (必須)

List[ColumnCondition]

結合する条件。 単一列の値の条件、単一列の正規表現条件、およびネストされた複合条件が使用でき、最大 32 個の条件を指定できます。

単一列の値の条件の使用

次の例では、対象の行が存在し、かつstatus属性列の最新の値がpendingである場合にのみ、データを更新します。列が存在しない場合、条件は満たされません。

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)

列値条件の組み合わせ

次の例では、条件 (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)

CAS を使用した楽観的ロックの実装

次の例では、現在の revision 値を読み取り、それを更新条件として使用します。revision は、別のリクエストがデータを変更していない場合にのみインクリメントされます。

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)