使用 Python SDK 对整型属性列执行行级原子的递增或递减操作。
前提条件
安装Tablestore Python SDK并初始化客户端。原子计数器需要 5.1.0 及以上版本,建议使用最新版本。
功能说明
调用 update_row 方法,将属性列更新类型设置为 INCREMENT,对整型属性列执行原子计数。正数表示递增,负数表示递减。
def update_row(
self,
table_name,
row,
condition,
return_type=None,
transaction_id=None,
)
以下示例将 counter 属性列的值原子增加 5。
primary_key = [("partition", "device"), ("id", 1)]
attribute_columns = {"INCREMENT": [("counter", 5)]}
row = Row(primary_key, attribute_columns)
condition = Condition(RowExistenceExpectation.EXPECT_EXIST)
consumed, return_row = client.update_row(
"example_table",
row,
condition,
)
print("Write CU: %s" % consumed.write)
Python SDK 的 update_row 方法不直接返回原子计数后的列值。如需获取新值,更新完成后调用 get_row 读取该列。
参数说明
原子计数操作包含以下关键参数。
|
名称 |
类型 |
说明 |
|
table_name(必选) |
|
数据表名称。 |
|
primary_key(必选) |
|
目标行的主键。必须包含全部主键列,且主键结构与数据表一致。 |
|
column_name(必选) |
|
执行原子计数的属性列名称。只支持整型属性列。 |
|
value(必选) |
|
属性列值的变更量。正数递增,负数递减。 |
|
condition(必选) |
|
更新条件。有关配置方法,请参见条件更新。 |
|
transaction_id(可选) |
|
局部事务 ID。仅在局部事务内执行原子计数时设置。 |
使用限制
只支持整型属性列。目标列不存在时,以
0为初始值执行变更;目标列存在但不是整型时,返回OTSParameterInvalid错误。变更量可为正数或负数,但计算结果不能超出 64 位有符号整数范围,否则返回
OTSParameterInvalid错误。原子计数只作用于最新版本,不支持指定数据版本号。更新后会写入一个新的数据版本。
-
同一次更新中,不能对同一属性列同时执行原子计数和覆盖写入、删除等其他操作。
重要原子计数操作可能因网络超时或系统错误返回失败。直接重试可能导致计数器被重复更新,使结果偏多或偏少。对精确性有严格要求时,先读取当前值,再通过条件更新写入新值。