使用 Python SDK 新增、修改或删除单行中的属性列,并按需指定数据版本号。
前提条件
安装Tablestore Python SDK并初始化客户端。
功能说明
调用 update_row 方法按主键更新单行数据。该方法只修改指定的属性列,不影响行中的其他属性列。
def update_row(
self,
table_name,
row,
condition,
return_type=None,
transaction_id=None,
)
以下示例将 example_table 中主键为 ("device", 1) 的行的 status 属性列更新为 offline。
primary_key = [("partition", "device"), ("id", 1)]
attribute_columns = {"PUT": [("status", "offline")]}
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)
参数说明
update_row 方法包含以下参数。
|
名称 |
类型 |
说明 |
|
table_name(必选) |
|
数据表名称。 |
|
row(必选) |
|
待更新的主键和属性列变更。 |
|
condition(必选) |
|
更新条件。有关配置方法,请参见条件更新。不需要判断行或列值时,设置为 |
|
return_type(可选) |
|
返回类型。 |
|
transaction_id(可选) |
|
局部事务 ID。仅在局部事务内更新数据时设置。有关使用方法,请参见局部事务。 |
行数据
row 的类型为 Row,包含以下参数。
|
名称 |
类型 |
说明 |
|
primary_key(必选) |
|
主键信息。必须包含全部主键列,且主键列的名称、顺序、数量和类型与数据表的主键结构一致。 |
|
attribute_columns(必选) |
|
属性列变更。 |
返回值
update_row 返回以下值。
|
字段 |
类型 |
说明 |
|
consumed |
|
本次操作消耗的读写 CU。 |
|
return_row |
|
返回的行数据。 |
场景示例
写入指定版本号的属性列
在 PUT 操作的属性列元组中指定第三个元素,可将数据版本号设置为指定的毫秒时间戳。
timestamp = int(time.time() * 1000)
primary_key = [("partition", "device"), ("id", 1)]
attribute_columns = {
"PUT": [("status", "online", timestamp)],
}
row = Row(primary_key, attribute_columns)
client.update_row(
"example_table",
row,
Condition(RowExistenceExpectation.EXPECT_EXIST),
)
删除属性列的指定版本
以下示例删除 status 属性列中版本号为 timestamp 的数据,保留该列的其他版本。
primary_key = [("partition", "device"), ("id", 1)]
attribute_columns = {
"DELETE": [("status", None, timestamp)],
}
row = Row(primary_key, attribute_columns)
client.update_row(
"example_table",
row,
Condition(RowExistenceExpectation.EXPECT_EXIST),
)
删除整个属性列
以下示例删除 status 属性列的全部版本。
primary_key = [("partition", "device"), ("id", 1)]
attribute_columns = {"DELETE_ALL": ["status"]}
row = Row(primary_key, attribute_columns)
client.update_row(
"example_table",
row,
Condition(RowExistenceExpectation.EXPECT_EXIST),
)