@@ -3118,6 +3118,42 @@ def directed_read_options(
31183118 print ("SingerId: {}, AlbumId: {}, AlbumTitle: {}" .format (* row ))
31193119 # [END spanner_directed_read]
31203120
3121+ def isolation_level_options (
3122+ instance_id ,
3123+ database_id ,
3124+ ):
3125+ from google .cloud .spanner_v1 import TransactionOptions , DefaultTransactionOptions
3126+
3127+ """
3128+ Shows how to run a Read Write transaction with isolation level options.
3129+ """
3130+ # [START spanner_isolation_level]
3131+ # instance_id = "your-spanner-instance"
3132+ # database_id = "your-spanner-db-id"
3133+
3134+ isolation_level_options_for_client = TransactionOptions .IsolationLevel .SERIALIZABLE
3135+
3136+ # The isolation level specified at the client level via default_transaction_options will be applied to all RW transactions
3137+ spanner_client = spanner .Client (
3138+ default_transaction_options = DefaultTransactionOptions (isolation_level = isolation_level_options_for_client )
3139+ )
3140+ instance = spanner_client .instance (instance_id )
3141+ database = instance .database (database_id )
3142+
3143+ isolation_level_options_for_request = TransactionOptions .IsolationLevel .REPEATABLE_READ
3144+
3145+ def insert_singers (transaction ):
3146+ row_ct = transaction .execute_update (
3147+ "INSERT INTO Singers (SingerId, FirstName, LastName) "
3148+ " VALUES (20, 'Virginia', 'Watson')"
3149+ )
3150+
3151+ print ("{} record(s) inserted." .format (row_ct ))
3152+
3153+ # The isolation level specified at the request level takes precedence over the isolation level configured at the client level.
3154+ database .run_in_transaction (insert_singers , isolation_level = isolation_level_options_for_request )
3155+ # [END spanner_isolation_level]
3156+
31213157
31223158def set_custom_timeout_and_retry (instance_id , database_id ):
31233159 """Executes a snapshot read with custom timeout and retry."""
@@ -3651,6 +3687,7 @@ def query_data_with_proto_types_parameter(instance_id, database_id):
36513687 )
36523688 enable_fine_grained_access_parser .add_argument ("--title" , default = "condition title" )
36533689 subparsers .add_parser ("directed_read_options" , help = directed_read_options .__doc__ )
3690+ subparsers .add_parser ("isolation_level_options" , help = isolation_level_options .__doc__ )
36543691 subparsers .add_parser (
36553692 "set_custom_timeout_and_retry" , help = set_custom_timeout_and_retry .__doc__
36563693 )
@@ -3803,6 +3840,8 @@ def query_data_with_proto_types_parameter(instance_id, database_id):
38033840 )
38043841 elif args .command == "directed_read_options" :
38053842 directed_read_options (args .instance_id , args .database_id )
3843+ elif args .command == "isolation_level_options" :
3844+ isolation_level_options (args .instance_id , args .database_id )
38063845 elif args .command == "set_custom_timeout_and_retry" :
38073846 set_custom_timeout_and_retry (args .instance_id , args .database_id )
38083847 elif args .command == "create_instance_with_autoscaling_config" :
0 commit comments