@@ -3175,6 +3175,42 @@ def directed_read_options(
31753175 print ("SingerId: {}, AlbumId: {}, AlbumTitle: {}" .format (* row ))
31763176 # [END spanner_directed_read]
31773177
3178+ def isolation_level_options (
3179+ instance_id ,
3180+ database_id ,
3181+ ):
3182+ from google .cloud .spanner_v1 import TransactionOptions , DefaultTransactionOptions
3183+
3184+ """
3185+ Shows how to run a Read Write transaction with isolation level options.
3186+ """
3187+ # [START spanner_isolation_level]
3188+ # instance_id = "your-spanner-instance"
3189+ # database_id = "your-spanner-db-id"
3190+
3191+ isolation_level_options_for_client = TransactionOptions .IsolationLevel .SERIALIZABLE
3192+
3193+ # The isolation level specified at the client level via default_transaction_options will be applied to all RW transactions
3194+ spanner_client = spanner .Client (
3195+ default_transaction_options = DefaultTransactionOptions (isolation_level = isolation_level_options_for_client )
3196+ )
3197+ instance = spanner_client .instance (instance_id )
3198+ database = instance .database (database_id )
3199+
3200+ isolation_level_options_for_request = TransactionOptions .IsolationLevel .REPEATABLE_READ
3201+
3202+ def insert_singers (transaction ):
3203+ row_ct = transaction .execute_update (
3204+ "INSERT INTO Singers (SingerId, FirstName, LastName) "
3205+ " VALUES (20, 'Virginia', 'Watson')"
3206+ )
3207+
3208+ print ("{} record(s) inserted." .format (row_ct ))
3209+
3210+ # The isolation level specified at the request level takes precedence over the isolation level configured at the client level.
3211+ database .run_in_transaction (insert_singers , isolation_level = isolation_level_options_for_request )
3212+ # [END spanner_isolation_level]
3213+
31783214
31793215def set_custom_timeout_and_retry (instance_id , database_id ):
31803216 """Executes a snapshot read with custom timeout and retry."""
@@ -3798,6 +3834,7 @@ def add_split_points(instance_id, database_id):
37983834 )
37993835 enable_fine_grained_access_parser .add_argument ("--title" , default = "condition title" )
38003836 subparsers .add_parser ("directed_read_options" , help = directed_read_options .__doc__ )
3837+ subparsers .add_parser ("isolation_level_options" , help = isolation_level_options .__doc__ )
38013838 subparsers .add_parser (
38023839 "set_custom_timeout_and_retry" , help = set_custom_timeout_and_retry .__doc__
38033840 )
@@ -3958,6 +3995,8 @@ def add_split_points(instance_id, database_id):
39583995 )
39593996 elif args .command == "directed_read_options" :
39603997 directed_read_options (args .instance_id , args .database_id )
3998+ elif args .command == "isolation_level_options" :
3999+ isolation_level_options (args .instance_id , args .database_id )
39614000 elif args .command == "set_custom_timeout_and_retry" :
39624001 set_custom_timeout_and_retry (args .instance_id , args .database_id )
39634002 elif args .command == "create_instance_with_autoscaling_config" :
0 commit comments