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.
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
|
|
Ö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)