全部产品
Search
文档中心

表格存储:批量更新数据

更新时间:Mar 30, 2026

本文介绍如何通过 Python SDK 对表格存储的数据进行批量更新操作,包括写入数据、修改数据和删除数据,支持同时操作多个表的数据。

注意事项

  • 服务端检查到部分操作的参数错误时会抛出参数错误异常,此时该请求中的所有操作都将不执行。

  • 批量更新操作单次支持写入的最大行数为200行,且所有行的数据量总和不能超过4MB。

  • 批量写入数据时,如果多次对同一个表调用add操作,仅最后一次add请求生效。

前提条件

初始化Tablestore Client

方法说明

def batch_write_row(self, request)

request参数说明

  • items(必选)List[TableInBatchWriteRowItem]:行数据操作列表,包含以下参数。

    名称

    类型

    说明

    table_name(必选)

    str

    数据表名称。

    row_items(必选)

    RowItem

    数据操作类型,包括写入数据、更新数据和删除数据。

  • transaction_id(可选)str:局部事务ID,用于唯一标识局部事务,详情请参见局部事务

示例代码

以下示例代码使用批量数据操作方法在 test_table 表中插入一行数据。

try:
    # 构造请求数据
    request = BatchWriteRowRequest()

    put_row_items = []
    # 构造 PutRowItem
    put_pk = [('id', 'row1')]
    put_columns = []
    put_row = Row(put_pk, put_columns)
    # 写入数据时必须指定写入条件 (RowExistenceExpectation.IGNORE,表示不做行存在性判断)
    put_row_item = PutRowItem(put_row, Condition(RowExistenceExpectation.IGNORE))
    put_row_items.append(put_row_item)

    request.add(TableInBatchWriteRowItem('test_table', put_row_items))

    # 调用 batch_write_row 方法进行批量数据操作
    response = client.batch_write_row(request)

    # 返回结果处理
    # put row
    for table_name,put_rows in response.table_of_put.items():
        for item in put_rows:
            if not item.is_ok:
                print('TableName: %s. Failed put row, Error message: %s' % (table_name, item.error_message))
    # update row
    for table_name, update_rows in response.table_of_update.items():
        for item in update_rows:
            if not item.is_ok:
                print('TableName: %s. Failed update row, Error message: %s.' % (table_name, item.error_message))
    # delete row
    for table_name, delete_rows in response.table_of_delete.items():
        for item in delete_rows:
            if not item.is_ok:
                print('TableName: %s. Failed delete row, Error message: %s.' % (table_name, item.error_message))
except Exception as e:
    print('Batch write row failed with error: %s' % e)

不同类型的数据操作示例代码参考如下。

  • PutRowItem:写入行数据。

    put_row_items = []
    # 构造 PutRowItem
    put_pk = [('id', 'row1')]
    put_columns = []
    put_row = Row(put_pk, put_columns)
    # 写入数据时必须指定写入条件 (RowExistenceExpectation.IGNORE,表示不做行存在性判断)
    put_row_item = PutRowItem(put_row, Condition(RowExistenceExpectation.IGNORE))
    put_row_items.append(put_row_item)
    
    request.add(TableInBatchWriteRowItem('test_table', put_row_items))

    写入行数据时添加属性列。

    # 属性列
    put_columns = [('col1','val1')]
    # 自定义数据版本号的属性列
    put_columns = [('col1','val1', int(time.time() * 1000))]
  • UpdateRowItem:更新行数据,您可以修改属性列的值、添加数据列、删除属性列的某个版本或整个属性列。

    update_row_items = []
    # 构造 UpdateRowItem
    update_pk = [('id', 'row1')]
    update_columns = {
        'PUT': [('col1', 'changed_val1')]
    }
    update_row = Row(update_pk, update_columns)
    # 更新数据时必须指定更新条件 (RowExistenceExpectation.IGNORE,表示不做行存在性判断)
    update_row_item = UpdateRowItem(update_row, Condition(RowExistenceExpectation.IGNORE))
    update_row_items.append(update_row_item)
    
    request.add(TableInBatchWriteRowItem('test_table', update_row_items))

    更新行数据时添加或删除属性列。

    # 添加属性列
    update_columns = {
        'PUT': [('col3', 'val3')]
    }
    # 添加自定义数据版本号的属性列
    update_columns = {
        'PUT': [('col4', 'val4', int(time.time() * 1000))]
    }
    # 删除属性列
    update_columns = {
        'DELETE_ALL': ['col2']
    }
  • DeleteRowItem:删除行数据。

    delete_row_items = []
    # 构造 DeleteRowItem
    delete_pk = [('id', 'row1')]
    delete_row = Row(delete_pk, [])
    # 写入数据时必须指定写入条件 (RowExistenceExpectation.IGNORE,表示不做行存在性判断)
    delete_row_item = DeleteRowItem(delete_row, Condition(RowExistenceExpectation.IGNORE))
    delete_row_items.append(delete_row_item)
    
    request.add(TableInBatchWriteRowItem('test_table', delete_row_items))
  • 对单表执行多次操作示例

    request = BatchWriteRowRequest()
    table_batch_items = TableInBatchWriteRowItem('<TABLE_NAME>', put_row_items)
    table_batch_items.row_items += delete_row_items
    request.add(table_batch_items)

相关文档