- 3.55.0 (latest)
- 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
ABatch
represents a set of datamodification operations to be performed on tables in a database. Use of aBatch
does not require creating an explicitSnapshot
orTransaction
. Untilcommit()
is called on aBatch
,no changes are propagated to the back-end.
Use Batch via BatchCheckout
Database.batch()
creates aBatchCheckout
instance to use as a context manager to handle creating and committing aBatch
. TheBatchCheckout
will automatically callcommit()
if thewith
block exitswithout raising an exception.
from google.cloud.spanner importKeySetclient =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)
Inserting records using a Batch
Batch.insert()
adds one or more new records to a table. This fails ifany of the records already exist.
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 forSTRING
columns uses a text string(str
in Python 3;unicode
in Python 2).
Additionally, if you are writing data intended for aBYTES
column, youmust base64 encode it.
Update records using a Batch
Batch.update()
updates one or more existing records in a table. This failsif any of the records do not already exist.
batch.update( 'citizens', columns=['email', 'age'], values=[ ['phred@exammple.com', 33], ['bharney@example.com', 32], ])
NOTE: Ensure that data being sent forSTRING
columns uses a text string(str
in Python 3;unicode
in Python 2).
Additionally, if you are writing data intended for aBYTES
column, youmust base64 encode it.
Insert or update records using a Batch
Batch.insert_or_update()
insertsor updates one or more records in atable. Existing rows have values for the supplied columns overwritten; othercolumn 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 forSTRING
columns uses a text string(str
in Python 3;unicode
in Python 2).
Additionally, if you are writing data intended for aBYTES
column, youmust base64 encode it.
Replace records using a Batch
Batch.replace()
insertsor updates one or more records in atable. Existing rows have values for the supplied columns overwritten; othercolumn 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 forSTRING
columns uses a text string(str
in Python 3;unicode
in Python 2).
Additionally, if you are writing data intended for aBYTES
column, youmust base64 encode it.
Delete records using a Batch
Batch.delete()
removes one or more records from a table. Attempting to deleterows that do not exist will not cause errors.
from google.cloud.spanner importKeySetto_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 theBatch.insert()
,Batch.update()
,Batch.insert_or_update()
,Batch.replace()
, andBatch.delete()
methods above, send them tothe back-end by callingBatch.commit()
, which makes theCommit
API call.
You do not need to call this yourself asBatchCheckout
will callthis method automatically upon exiting thewith
block.
batch.commit()
Next Step
Next, learn aboutRead-only Transactions via Snapshots.
Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-07-18 UTC.