Todos os produtos
Search
Central de documentação

Tablestore:Operações em lote de linhas

Última atualização: Aug 20, 2026

Utilize o Tablestore SDK for Python para gravar, atualizar e excluir linhas em uma ou mais tabelas com uma única solicitação.

Pré-requisitos

Instale o Tablestore SDK for Python e inicialize um cliente.

Descrição da função

Chame batch_write_row para executar operações em lote nas linhas. O resultado de cada operação é retornado de forma independente.

def batch_write_row(self, request)

O exemplo a seguir grava duas linhas na tabela example_table.

condition = Condition(RowExistenceExpectation.IGNORE)
row_items = [
    PutRowItem(
        Row([("partition", "device"), ("id", 1)], [("status", "online")]),
        condition,
    ),
    PutRowItem(
        Row([("partition", "device"), ("id", 2)], [("status", "offline")]),
        condition,
    ),
]
request = BatchWriteRowRequest()
request.add(TableInBatchWriteRowItem("example_table", row_items))

response = client.batch_write_row(request)
print(response.is_all_succeed())
Nota

Uma única solicitação em lote aceita até 200 linhas, e o tamanho total não pode exceder 4 MB. Caso o servidor detecte um parâmetro inválido em qualquer operação, ele retornará um erro de parâmetro e nenhuma operação do lote será executada.

Parâmetros

O método batch_write_row possui o seguinte parâmetro.

Nome

Tipo

Descrição

request (obrigatório)

BatchWriteRowRequest

Solicitação de operação em lote de linhas. Chame add para incluir um TableInBatchWriteRowItem para cada tabela. As configurações são armazenadas pelo nome da tabela. Se a mesma tabela for adicionada mais de uma vez, a configuração mais recente substituirá a anterior.

Configurações de operação da tabela

Cada elemento em request.items[] é do tipo TableInBatchWriteRowItem e contém os seguintes parâmetros.

Nome

Tipo

Descrição

table_name (obrigatório)

str

Nome da tabela.

row_items (obrigatório)

List[RowItem]

Operações de linha. Os tipos suportados são PutRowItem, UpdateRowItem e DeleteRowItem.

Operações de linha

Cada elemento em row_items[] contém os seguintes parâmetros comuns.

Nome

Tipo

Descrição

row (obrigatório)

Row

Dados da linha. Para PutRowItem, especifique a chave primária e as colunas de atributo a serem gravadas. No caso de UpdateRowItem, defina a chave primária e as alterações nas colunas de atributo. Já para DeleteRowItem, informe apenas a chave primária.

condition (obrigatório)

Condition

Condição da operação. Para mais informações, consulte Use conditional updates. Para ignorar as verificações de valores de linha e coluna, use Condition(RowExistenceExpectation.IGNORE).

return_type (opcional)

ReturnType

Tipo de retorno. RT_NONE, valor padrão, não retorna dados. RT_PK retorna a chave primária.

Transações locais

Chame request.set_transaction_id(transaction_id) para incluir um ID de transação local na solicitação em lote. Em uma transação local, a solicitação pode conter apenas linhas da tabela associada à transação, e todas as linhas devem ter o valor da chave de partição usado para criar a transação. Para mais detalhes, veja Use local transactions.

Resposta

batch_write_row retorna um objeto BatchWriteRowResponse. Utilize os métodos abaixo para obter os resultados.

Método

Tipo de retorno

Descrição

is_all_succeed()

bool

Indica se todas as operações de linha foram bem-sucedidas.

get_succeed_of_put() / get_failed_of_put()

List[BatchWriteRowResponseItem]

Resultados de inserção com sucesso ou falha.

get_succeed_of_update() / get_failed_of_update()

List[BatchWriteRowResponseItem]

Resultados de atualização com sucesso ou falha.

get_succeed_of_delete() / get_failed_of_delete()

List[BatchWriteRowResponseItem]

Resultados de exclusão com sucesso ou falha.

get_*_by_table(table_name)

List[BatchWriteRowResponseItem]

Resultados por linha para a tabela e o tipo de operação especificados.

Cada BatchWriteRowResponseItem contém o status de sucesso, código de erro, mensagem de erro, CUs consumidos e chave primária.

Exemplos

Atualizar várias linhas

Este exemplo atualiza a coluna de atributo status em duas linhas.

condition = Condition(RowExistenceExpectation.EXPECT_EXIST)
row_items = [
    UpdateRowItem(
        Row([("partition", "device"), ("id", 1)], {"PUT": [("status", "online")]}),
        condition,
    ),
    UpdateRowItem(
        Row([("partition", "device"), ("id", 2)], {"PUT": [("status", "online")]}),
        condition,
    ),
]
request = BatchWriteRowRequest()
request.add(TableInBatchWriteRowItem("example_table", row_items))

response = client.batch_write_row(request)

Excluir várias linhas

O exemplo a seguir exclui duas linhas.

condition = Condition(RowExistenceExpectation.EXPECT_EXIST)
row_items = [
    DeleteRowItem(Row([("partition", "device"), ("id", 1)]), condition),
    DeleteRowItem(Row([("partition", "device"), ("id", 2)]), condition),
]
request = BatchWriteRowRequest()
request.add(TableInBatchWriteRowItem("example_table", row_items))

response = client.batch_write_row(request)

Combinar tipos de operação entre tabelas

Neste cenário, uma linha é gravada em example_table e outra é atualizada em another_table na mesma solicitação.

put_row = Row(
    [("partition", "device"), ("id", 3)],
    [("status", "online")],
)
update_row = Row(
    [("partition", "order"), ("id", 1)],
    {"PUT": [("status", "processed")]},
)
request = BatchWriteRowRequest()
request.add(
    TableInBatchWriteRowItem(
        "example_table",
        [PutRowItem(put_row, Condition(RowExistenceExpectation.IGNORE))],
    )
)
request.add(
    TableInBatchWriteRowItem(
        "another_table",
        [UpdateRowItem(update_row, Condition(RowExistenceExpectation.EXPECT_EXIST))],
    )
)

response = client.batch_write_row(request)