All Products
Search
Document Center

Tablestore:Gunakan pembaruan bersyarat

Last Updated:Aug 05, 2026

Gunakan Tablestore SDK untuk Python untuk menambahkan kondisi pada operasi put, update, atau delete baris sehingga operasi tersebut hanya dijalankan jika baris target memenuhi kondisi yang ditentukan.

Prasyarat

Instal Tablestore SDK untuk Python dan inisialisasi klien.

Deskripsi fungsi

Gunakan Condition untuk menentukan kondisi keberadaan baris dan kondisi nilai kolom atribut. Teruskan kondisi tersebut ke put_row, update_row, delete_row, atau operasi batch baris yang sesuai. Jika kondisi tidak terpenuhi, server akan mengembalikan error dan tidak mengubah baris tersebut.

Condition(row_existence_expectation, column_condition=None)

Contoh berikut memperbarui kolom atribut status hanya jika baris target ada.

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

Parameter

Kondisi pembaruan

Condition mencakup parameter berikut.

Name

Type

Description

row_existence_expectation (required)

RowExistenceExpectation

Kondisi keberadaan baris. IGNORE melewati pemeriksaan keberadaan baris. EXPECT_EXIST terpenuhi jika baris ada. EXPECT_NOT_EXIST terpenuhi jika baris tidak ada.

column_condition (optional)

ColumnCondition

Kondisi nilai kolom atribut. Didukung SingleColumnCondition, SingleColumnRegexCondition, dan CompositeColumnCondition.

Kondisi nilai kolom tunggal

Panggil SingleColumnCondition(column_name, column_value, comparator, pass_if_missing=True, latest_version_only=True) untuk membuat kondisi nilai kolom tunggal.

Name

Type

Description

column_name (required)

str

Nama kolom atribut yang akan dievaluasi.

column_value (required)

str, int, bytes, float, atau bool

Nilai target. Jenisnya harus sesuai dengan jenis nilai kolom atribut.

comparator (required)

ComparatorType

Operator perbandingan. Nilai yang valid adalah EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_EQUAL, LESS_THAN, dan LESS_EQUAL.

pass_if_missing (optional)

bool

Menentukan apakah kondisi terpenuhi jika kolom atribut target tidak ada. Nilai default: True. Jika parameter ini False, kondisi tidak terpenuhi ketika kolom tidak ada.

latest_version_only (optional)

bool

Menentukan apakah hanya versi terbaru yang dievaluasi. Nilai default: True. Jika parameter ini False, kondisi terpenuhi jika ada versi apa pun yang cocok.

Kondisi ekspresi reguler kolom tunggal

Panggil SingleColumnRegexCondition(column_name, comparator, column_value=None, regex_rule=None, latest_version_only=True) untuk membuat kondisi ekspresi reguler kolom tunggal. Hanya kolom atribut bertipe string yang mendukung kondisi ekspresi reguler.

Name

Type

Description

column_name (required)

str

Nama kolom atribut string yang akan dievaluasi.

comparator (required)

ComparatorType

Operator perbandingan. Nilai yang valid adalah EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_EQUAL, LESS_THAN, LESS_EQUAL, EXIST, dan NOT_EXIST.

column_value (optional)

str, int, atau float

Nilai target. Abaikan parameter ini jika comparator bernilai EXIST atau NOT_EXIST. Jika tidak, parameter ini wajib diisi. Jika regex_rule diabaikan, jenisnya harus sesuai dengan jenis nilai kolom atribut. Jika regex_rule ditentukan, jenisnya harus sesuai dengan regex_rule.cast_type.

regex_rule (optional)

RegexRule

Aturan ekstraksi substring dan konversi tipe. Jika parameter ini diabaikan, nilai kolom atribut dibandingkan secara langsung.

latest_version_only (optional)

bool

Menentukan apakah hanya versi terbaru yang dievaluasi. Nilai default: True. Jika parameter ini False, kondisi terpenuhi jika ada versi apa pun yang cocok.

Jika kolom atribut target tidak ada, kondisi ekspresi reguler kolom tunggal tidak pernah terpenuhi. Parameter pass_if_missing tidak dapat dikonfigurasi secara terpisah untuk kondisi ini.

Aturan ekspresi reguler

Parameter regex_rule bertipe RegexRule dan mencakup parameter berikut.

Name

Type

Description

regex_input (required)

str

Ekspresi reguler, maksimal 256 byte. Ekspresi yang kompatibel dengan Perl dan karakter single-byte didukung. Karakter Tionghoa tidak didukung. Jika ekspresi berisi capturing groups, grup pertama diekstraksi. Jika tidak, seluruh kecocokan diekstraksi.

cast_type (required)

CastType

Jenis tujuan konversi nilai yang diekstraksi. Nilai yang valid adalah VT_STRING, VT_INTEGER, dan VT_DOUBLE. Kondisi tidak terpenuhi jika nilai yang diekstraksi tidak dapat dikonversi.

Kondisi nilai kolom majemuk

Panggil CompositeColumnCondition(combinator) untuk membuat kondisi nilai kolom majemuk, lalu gunakan add_sub_condition untuk menambahkan subkondisi.

Name

Type

Description

combinator (required)

LogicalOperator

Operator logika. Nilai yang valid adalah AND, OR, dan NOT.

sub_conditions (required)

List[ColumnCondition]

Kondisi yang akan digabungkan. Didukung kondisi nilai kolom tunggal, kondisi ekspresi reguler kolom tunggal, dan kondisi majemuk bersarang, dengan maksimal 32 kondisi.

Contoh

Gunakan kondisi nilai kolom tunggal

Contoh berikut memperbarui data hanya jika baris target ada dan nilai terbaru dari kolom atribut status adalah pending. Kondisi tidak terpenuhi jika kolom tersebut tidak ada.

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)

Gabungkan kondisi nilai kolom

Contoh berikut membangun kondisi (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)

Implementasikan kunci optimis dengan CAS

Contoh berikut membaca nilai revision saat ini dan menggunakannya sebagai kondisi pembaruan. Revisi hanya dinaikkan jika permintaan lain belum memodifikasi data tersebut.

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)