すべてのプロダクト
Search
ドキュメントセンター

Tablestore:バッチ行操作

最終更新日:Aug 05, 2026

Tablestore SDK for Python を使用して、1 回のリクエストで 1 つ以上のテーブルに対して行の書き込み、更新、削除を実行します。

前提条件

Tablestore SDK for Python をインストールし、クライアントを初期化します。

機能の説明

batch_write_row を呼び出して、バッチ行操作を実行します。各行操作の結果は個別に返されます。

def batch_write_row(self, request)

次の例では、example_table に 2 行を書き込みます。

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())
説明

1 回のバッチリクエストで最大 200 行をサポートし、すべての行の合計サイズは 4 MB を超えることはできません。サーバーがいずれかの操作で無効なパラメーターを検出した場合、パラメーターエラーを返し、バッチ内のいずれの操作も実行しません。

パラメーター

batch_write_row メソッドは、次のパラメーターを受け取ります。

名前

説明

request (必須)

BatchWriteRowRequest

バッチ行操作リクエストです。add を呼び出して、テーブルごとに 1 つの TableInBatchWriteRowItem を追加します。設定はテーブル名ごとに保存されます。同じテーブルが複数回追加された場合、最新の設定が以前の設定を上書きします。

テーブル操作の設定

request.items[] の各要素は TableInBatchWriteRowItem 型で、次のパラメーターが含まれます。

名前

説明

table_name (必須)

str

テーブル名です。

row_items (必須)

List[RowItem]

行操作です。サポートされる型は PutRowItemUpdateRowItemDeleteRowItem です。

行操作

row_items[] の各要素には、次の共通パラメーターが含まれます。

名前

説明

row (必須)

Row

行データです。PutRowItem の場合は、書き込むプライマリキーと属性列を指定します。UpdateRowItem の場合は、プライマリキーと属性列の変更内容を指定します。DeleteRowItem の場合は、プライマリキーのみを指定します。

condition (必須)

Condition

操作条件。詳細については、「条件付き更新を使用する」をご参照ください。行と列の値のチェックを省略するには、Condition(RowExistenceExpectation.IGNORE) を指定します。

return_type (任意)

ReturnType

戻り値の型です。デフォルト値の RT_NONE はデータを返しません。RT_PK はプライマリキーを返します。

ローカルトランザクション

request.set_transaction_id(transaction_id) を呼び出して、バッチリクエストにローカルトランザクション ID を含めます。ローカルトランザクションでは、リクエストに含めることができるのは、そのトランザクションに関連付けられたテーブルの行のみです。また、すべての行には、トランザクションの作成に使用されたパーティションキー値が必要です。詳細については、「ローカルトランザクションを使用する」をご参照ください。

レスポンス

batch_write_rowBatchWriteRowResponse を返します。結果を取得するには、次のメソッドを使用します。

メソッド

戻り値の型

説明

is_all_succeed()

bool

すべての行操作が成功したかどうかを示します。

get_succeed_of_put() / get_failed_of_put()

List[BatchWriteRowResponseItem]

put の成功または失敗の結果です。

get_succeed_of_update() / get_failed_of_update()

List[BatchWriteRowResponseItem]

update の成功または失敗の結果です。

get_succeed_of_delete() / get_failed_of_delete()

List[BatchWriteRowResponseItem]

delete の成功または失敗の結果です。

get_*_by_table(table_name)

List[BatchWriteRowResponseItem]

指定したテーブルと操作タイプにおける、行ごとの結果です。

BatchWriteRowResponseItem には、成功ステータス、エラーコード、エラーメッセージ、消費 CU、プライマリキーが含まれます。

複数行の更新

次の例では、2 行の status 属性列を更新します。

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)

複数行の削除

次の例では、2 行を削除します。

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)

テーブルをまたいだ操作タイプの混在

次の例では、同一リクエストで example_table に 1 行を書き込み、another_table の 1 行を更新します。

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)