createMany

It sends several creates in parallel and tells you which succeeded and which failed (with the row’s position), so one bad row doesn’t lose the rest. It is not one transaction: if you need all-or-nothing, see below. In Python the async client runs rows concurrently (concurrency= there); the sync client sends them in order.

All or nothing: a transaction

When several writes must succeed together (move stock and create the order, or neither), do them in a flow with the Transaction block. Its operations is a list; either every write lands or none does:
The block outputs the results in order. An update of a record that doesn’t exist fails the whole transaction with not_found, and nothing is written. Events for the records it created and updated are emitted only after the transaction has committed; deletes made in a transaction don’t emit events. Call the flow from your app with pawabase.flows.run(...), or make it a route. The flow runs with its own authority, so check who’s asking (a Require sign-in or Check policy block) before the transaction.

Update or delete many

Query, then act on each:
Keep concurrency modest (batches of 20 to 50) so you don’t hit your table’s rate limit. For thousands of rows, do it on a server (a flow, or SQL) where it is one operation.

When to use import instead

Progress

For a progress bar, chunk it yourself:

Write records

Single writes.

Import and export

For files and large loads.