- 3.58.0 (latest)
- 3.57.0
- 3.56.0
- 3.55.0
- 3.54.0
- 3.53.0
- 3.52.0
- 3.51.0
- 3.50.1
- 3.46.0
- 3.45.0
- 3.44.0
- 3.43.0
- 3.42.0
- 3.41.0
- 3.40.1
- 3.39.0
- 3.38.0
- 3.37.0
- 3.36.0
- 3.35.1
- 3.34.0
- 3.33.0
- 3.32.0
- 3.31.0
- 3.30.0
- 3.29.0
- 3.28.0
- 3.27.1
- 3.26.0
- 3.25.0
- 3.24.0
- 3.23.0
- 3.22.2
- 3.21.0
- 3.20.0
- 3.19.0
- 3.18.0
- 3.17.0
- 3.16.0
- 3.15.1
- 3.14.1
- 3.13.0
- 3.12.1
- 3.11.1
- 3.10.0
- 3.9.0
- 3.8.0
- 3.7.0
- 3.6.0
- 3.5.0
- 3.4.0
- 3.3.0
- 3.2.0
- 3.1.0
- 3.0.0
- 2.1.1
- 2.0.0
- 1.19.3
- 1.18.0
- 1.17.1
- 1.16.0
- 1.15.1
- 1.14.0
- 1.13.0
- 1.12.0
- 1.11.0
- 1.10.0
Batching Modifications
A Batch
represents a set of data modification operations to be performed on tables in a database. Use of a Batch
does not require creating an explicit Snapshot
or Transaction
. Until commit()
is called on a Batch
, no changes are propagated to the back-end.
Starting a Batch
Construct a Batch
object from a Database
object:
from google.cloud import spanner client = spanner.Client() instance = client.instance(INSTANCE_NAME) database = instance.database(DATABASE_NAME) batch = database.batch()
Inserting records using a Batch
Batch.insert()
adds one or more new records to a table. Fails if any of the records already exists.
batch.insert( 'citizens', columns=['email', 'first_name', 'last_name', 'age'], values=[ ['phred@exammple.com', 'Phred', 'Phlyntstone', 32], ['bharney@example.com', 'Bharney', 'Rhubble', 31], ])
NOTE: Ensure that data being sent for STRING
columns uses a text string (str
in Python 3; unicode
in Python 2).
Additionally, if you are writing data intended for a BYTES
column, you must base64 encode it.
Update records using a Batch
Batch.update()
updates one or more existing records in a table. Fails if any of the records does not already exist.
batch.update( 'citizens', columns=['email', 'age'], values=[ ['phred@exammple.com', 33], ['bharney@example.com', 32], ])
NOTE: Ensure that data being sent for STRING
columns uses a text string (str
in Python 3; unicode
in Python 2).
Additionally, if you are writing data intended for a BYTES
column, you must base64 encode it.
Insert or update records using a Batch
Batch.insert_or_update()
inserts or updates one or more records in a table. Existing rows have values for the supplied columns overwritten; other column values are preserved.
batch.insert_or_update( 'citizens', columns=['email', 'first_name', 'last_name', 'age'], values=[ ['phred@exammple.com', 'Phred', 'Phlyntstone', 31], ['wylma@example.com', 'Wylma', 'Phlyntstone', 29], ])
NOTE: Ensure that data being sent for STRING
columns uses a text string (str
in Python 3; unicode
in Python 2).
Additionally, if you are writing data intended for a BYTES
column, you must base64 encode it.
Replace records using a Batch
Batch.replace()
inserts or updates one or more records in a table. Existing rows have values for the supplied columns overwritten; other column values are set to null.
batch.replace( 'citizens', columns=['email', 'first_name', 'last_name', 'age'], values=[ ['bharney@example.com', 'Bharney', 'Rhubble', 30], ['bhettye@example.com', 'Bhettye', 'Rhubble', 30], ])
NOTE: Ensure that data being sent for STRING
columns uses a text string (str
in Python 3; unicode
in Python 2).
Additionally, if you are writing data intended for a BYTES
column, you must base64 encode it.
Delete records using a Batch
Batch.delete()
removes one or more records from a table. Non-existent rows do not cause errors.
from google.cloud.spanner import KeySet to_delete = KeySet(keys=[ ('bharney@example.com',) ('nonesuch@example.com',) ]) batch.delete('citizens', to_delete)
Commit changes for a Batch
After describing the modifications to be made to table data via the Batch.insert()
, Batch.update()
, Batch.insert_or_update()
, Batch.replace()
, and Batch.delete()
methods above, send them to the back-end by calling Batch.commit()
, which makes the Commit
API call.
batch.commit()
Use a Batch as a Context Manager
Rather than calling Batch.commit()
manually, you can use the Batch
instance as a context manager, and have it called automatically if the with
block exits without raising an exception.
from google.cloud.spanner import KeySet client = spanner.Client() instance = client.instance(INSTANCE_NAME) database = instance.database(DATABASE_NAME) to_delete = KeySet(keys=[ ('bharney@example.com',) ('nonesuch@example.com',) ]) with database.batch() as batch: batch.insert( 'citizens', columns=['email', 'first_name', 'last_name', 'age'], values=[ ['phred@exammple.com', 'Phred', 'Phlyntstone', 32], ['bharney@example.com', 'Bharney', 'Rhubble', 31], ]) batch.update( 'citizens', columns=['email', 'age'], values=[ ['phred@exammple.com', 33], ['bharney@example.com', 32], ]) ... batch.delete('citizens', to_delete)
Next Step
Next, learn about Read-only Transactions via Snapshots.