Insira, atualize e exclua linhas em várias tabelas do Tablestore em uma única solicitação com o SDK Python.
Observações de uso
Se alguma operação contiver um erro de parâmetro, o servidor gerará uma exceção e nenhuma operação será executada.
Uma única solicitação aceita até 200 linhas, com tamanho total máximo de 4 MB.
Ao chamar o método add várias vezes para a mesma tabela, somente a última chamada terá efeito.
Pré-requisitos
Método
def batch_write_row(self, request)
Código de exemplo
Este exemplo insere uma linha na tabela test_table:
try:
# Construct the request.
request = BatchWriteRowRequest()
put_row_items = []
# Construct a PutRowItem.
put_pk = [('id', 'row1')]
put_columns = []
put_row = Row(put_pk, put_columns)
# You must specify a condition for the write operation. RowExistenceExpectation.IGNORE means no row existence check is performed.
put_row_item = PutRowItem(put_row, Condition(RowExistenceExpectation.IGNORE))
put_row_items.append(put_row_item)
request.add(TableInBatchWriteRowItem('test_table', put_row_items))
# Call the batch_write_row method to perform the batch operation.
response = client.batch_write_row(request)
# Process the response.
# 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 to 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 to 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 to delete row, Error message: %s.' % (table_name, item.error_message))
except Exception as e:
print('Batch write row failed with error: %s' % e)
Os exemplos a seguir demonstram cada tipo de operação.
-
PutRowItem: Insere dados da linha.
put_row_items = [] # Construct a PutRowItem. put_pk = [('id', 'row1')] put_columns = [] put_row = Row(put_pk, put_columns) # You must specify a condition for the write operation. RowExistenceExpectation.IGNORE means no row existence check is performed. put_row_item = PutRowItem(put_row, Condition(RowExistenceExpectation.IGNORE)) put_row_items.append(put_row_item) request.add(TableInBatchWriteRowItem('test_table', put_row_items))Adicione colunas de atributo durante uma operação de inserção:
# Attribute columns put_columns = [('col1','val1')] # Attribute column with a custom timestamp put_columns = [('col1','val1', int(time.time() * 1000))] -
UpdateRowItem: Modifica valores de colunas de atributo, adiciona colunas, exclui uma versão específica da coluna ou remove a coluna inteira.
update_row_items = [] # Construct an UpdateRowItem. update_pk = [('id', 'row1')] update_columns = { 'PUT': [('col1', 'changed_val1')] } update_row = Row(update_pk, update_columns) # You must specify a condition for the update operation. RowExistenceExpectation.IGNORE means no row existence check is performed. update_row_item = UpdateRowItem(update_row, Condition(RowExistenceExpectation.IGNORE)) update_row_items.append(update_row_item) request.add(TableInBatchWriteRowItem('test_table', update_row_items))Adicione ou exclua colunas de atributo durante uma operação de atualização:
# Add attribute columns. update_columns = { 'PUT': [('col3', 'val3')] } # Add an attribute column with a custom timestamp. update_columns = { 'PUT': [('col4', 'val4', int(time.time() * 1000))] } # Delete attribute columns. update_columns = { 'DELETE_ALL': ['col2'] } -
DeleteRowItem: Exclui dados da linha.
delete_row_items = [] # Construct a DeleteRowItem. delete_pk = [('id', 'row1')] delete_row = Row(delete_pk, []) # You must specify a condition for the delete operation. RowExistenceExpectation.IGNORE means no row existence check is performed. delete_row_item = DeleteRowItem(delete_row, Condition(RowExistenceExpectation.IGNORE)) delete_row_items.append(delete_row_item) request.add(TableInBatchWriteRowItem('test_table', delete_row_items)) -
Exemplo de execução de múltiplas operações em uma única tabela
request = BatchWriteRowRequest() table_batch_items = TableInBatchWriteRowItem('<TABLE_NAME>', put_row_items) table_batch_items.row_items += delete_row_items request.add(table_batch_items)