Tüm Ürünler
Search
Belge Merkezi

Tablestore:Use conditional updates

Son Güncelleme:Oct 02, 2026

Tablestore SDK for Python kullanarak satır ekleme, güncelleme veya silme işlemlerine koşul ekleyin. Bu sayede işlem yalnızca hedef satır belirtilen koşulları karşıladığında çalışır.

Önkoşullar

Tablestore SDK for Python paketini yükleyin ve bir istemci başlatın.

İşlev açıklaması

Bir satırın varlık durumunu ve nitelik sütunu değerini belirtmek için Condition nesnesini kullanın. Bu koşulu put_row, update_row, delete_row veya ilgili toplu satır işlemine iletin. Koşul sağlanmazsa sunucu hata döndürür ve satırı değiştirmez.

Condition(row_existence_expectation, column_condition=None)

Aşağıdaki örnek, yalnızca hedef satır mevcutsa status nitelik sütununu günceller.

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

Parametreler

Güncelleme koşulu

Condition aşağıdaki parametreleri içerir.


Ad


Tür


Açıklama


row_existence_expectation (gerekli)


RowExistenceExpectation


Satır varlık koşulu. IGNORE satır varlık denetimini atlar. EXPECT_EXIST satır mevcut olduğunda sağlanır. EXPECT_NOT_EXIST satır mevcut olmadığında sağlanır.


column_condition (isteğe bağlı)


ColumnCondition


Nitelik sütunu değeri koşulu. SingleColumnCondition, SingleColumnRegexCondition ve CompositeColumnCondition desteklenir.

Tek sütunlu değer koşulu

Tek sütunlu değer koşulu oluşturmak için SingleColumnCondition(column_name, column_value, comparator, pass_if_missing=True, latest_version_only=True) yöntemini çağırın.


Ad


Tür


Açıklama


column_name (gerekli)


str


Değerlendirilecek nitelik sütununun adı.


column_value (gerekli)


str, int, bytes, float veya bool


Hedef değer. Türü, nitelik sütunu değer türüyle eşleşmelidir.


comparator (gerekli)


ComparatorType


Karşılaştırma işleci. Geçerli değerler şunlardır: EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_EQUAL, LESS_THAN ve LESS_EQUAL.


pass_if_missing (isteğe bağlı)


bool


Hedef nitelik sütunu eksikse koşulun sağlanmış sayılıp sayılmayacağını belirtir. Varsayılan değer: True. Bu parametre False ise sütun eksik olduğunda koşul sağlanmaz.


latest_version_only (isteğe bağlı)


bool


Yalnızca en son sürümün değerlendirilip değerlendirilmeyeceğini belirtir. Varsayılan değer: True. Bu parametre False ise herhangi bir sürüm eşleştiğinde koşul sağlanır.

Tek sütunlu düzenli ifade koşulu

Tek sütunlu düzenli ifade koşulu oluşturmak için SingleColumnRegexCondition(column_name, comparator, column_value=None, regex_rule=None, latest_version_only=True) yöntemini çağırın. Düzenli ifade koşulları yalnızca dize nitelik sütunlarını destekler.


Ad


Tür


Açıklama


column_name (gerekli)


str


Değerlendirilecek dize nitelik sütununun adı.


comparator (gerekli)


ComparatorType


Karşılaştırma işleci. Geçerli değerler şunlardır: EQUAL, NOT_EQUAL, GREATER_THAN, GREATER_EQUAL, LESS_THAN, LESS_EQUAL, EXIST ve NOT_EXIST.


column_value (isteğe bağlı)


str, int veya float


Hedef değer. comparator değeri EXIST veya NOT_EXIST ise bu parametreyi atlayın. Aksi takdirde bu parametre gereklidir. regex_rule atlanırsa tür, nitelik sütunu değer türüyle eşleşmelidir. regex_rule belirtilirse tür, regex_rule.cast_type ile eşleşmelidir.


regex_rule (isteğe bağlı)


RegexRule


Alt dize çıkarma ve tür dönüştürme kuralı. Bu parametre atlanırsa nitelik sütunu değeri doğrudan karşılaştırılır.


latest_version_only (isteğe bağlı)


bool


Yalnızca en son sürümün değerlendirilip değerlendirilmeyeceğini belirtir. Varsayılan değer: True. Bu parametre False ise herhangi bir sürüm eşleştiğinde koşul sağlanır.

Hedef nitelik sütunu eksikse tek sütunlu düzenli ifade koşulu asla sağlanmaz. pass_if_missing ayrı olarak yapılandırılamaz.

Düzenli ifade kuralı

regex_rule parametresi RegexRule türündedir ve aşağıdaki parametreleri içerir.


Ad


Tür


Açıklama


regex_input (gerekli)


str


Düzenli ifade, en fazla 256 bayt. Perl uyumlu ifadeler ve tek baytlı karakterler desteklenir. Çince karakterler desteklenmez. İfade yakalama grupları içeriyorsa ilk grup çıkarılır. Aksi takdirde tüm eşleşme çıkarılır.


cast_type (gerekli)


CastType


Çıkarılan değerin dönüştürüleceği tür. Geçerli değerler şunlardır: VT_STRING, VT_INTEGER ve VT_DOUBLE. Çıkarılan değer dönüştürülemezse koşul sağlanmaz.

Bileşik sütun değeri koşulu

Bileşik sütun değeri koşulu oluşturmak için CompositeColumnCondition(combinator) yöntemini çağırın ve ardından koşulları eklemek üzere add_sub_condition yöntemini kullanın.


Ad


Tür


Açıklama


combinator (gerekli)


LogicalOperator


Mantıksal işleç. Geçerli değerler şunlardır: AND, OR ve NOT.


sub_conditions (gerekli)


List[ColumnCondition]


Birleştirilecek koşullar. Tek sütunlu değer koşulları, tek sütunlu düzenli ifade koşulları ve iç içe geçmiş bileşik koşullar desteklenir. En fazla 32 koşul eklenebilir.

Örnekler

Tek sütunlu değer koşulu kullanma

Aşağıdaki örnek, yalnızca hedef satır mevcutsa ve status nitelik sütununun en son değeri pending ise verileri günceller. Sütun eksikse koşul sağlanmaz.

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)

Sütun değeri koşullarını birleştirme

Aşağıdaki örnek (status == "pending" AND revision == 1) OR priority > 5 koşulunu oluşturur.

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 ile iyimser kilitleme uygulama

Aşağıdaki örnek mevcut revision değerini okur ve bunu bir güncelleme koşulu olarak kullanır. Revizyon, yalnızca başka bir istek verileri değiştirmemişse artırılır.

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)