全部產品
Search
文件中心

Tablestore:批次更新資料

更新時間:Mar 31, 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)

相關文檔