@@ -2510,6 +2510,36 @@ def update_venues(transaction):
25102510 # [END spanner_set_transaction_tag]
25112511
25122512
2513+ def set_transaction_timeout (instance_id , database_id ):
2514+ """Executes a transaction with a transaction timeout."""
2515+ # [START spanner_transaction_timeout]
2516+ # instance_id = "your-spanner-instance"
2517+ # database_id = "your-spanner-db-id"
2518+ spanner_client = spanner .Client ()
2519+ instance = spanner_client .instance (instance_id )
2520+ database = instance .database (database_id )
2521+
2522+ def read_then_write (transaction ):
2523+ # Read records.
2524+ results = transaction .execute_sql (
2525+ "SELECT SingerId, FirstName, LastName FROM Singers ORDER BY LastName, FirstName"
2526+ )
2527+ for result in results :
2528+ print ("SingerId: {}, FirstName: {}, LastName: {}" .format (* result ))
2529+
2530+ # Insert a record.
2531+ row_ct = transaction .execute_update (
2532+ "INSERT INTO Singers (SingerId, FirstName, LastName) "
2533+ " VALUES (100, 'George', 'Washington')"
2534+ )
2535+ print ("{} record(s) inserted." .format (row_ct ))
2536+
2537+ # configure transaction timeout to 60 seconds
2538+ database .run_in_transaction (read_then_write , timeout_secs = 60 )
2539+
2540+ # [END spanner_transaction_timeout]
2541+
2542+
25132543def set_request_tag (instance_id , database_id ):
25142544 """Executes a snapshot read with a request tag."""
25152545 # [START spanner_set_request_tag]
@@ -3272,6 +3302,7 @@ def update_instance_default_backup_schedule_type(instance_id):
32723302
32733303 print ("Updated instance {} to have default backup schedules" .format (instance_id ))
32743304
3305+
32753306# [END spanner_update_instance_default_backup_schedule_type]
32763307
32773308
@@ -3617,6 +3648,9 @@ def add_split_points(instance_id, database_id):
36173648 subparsers .add_parser ("add_column" , help = add_column .__doc__ )
36183649 subparsers .add_parser ("update_data" , help = update_data .__doc__ )
36193650 subparsers .add_parser ("set_max_commit_delay" , help = set_max_commit_delay .__doc__ )
3651+ subparsers .add_parser (
3652+ "set_transaction_timeout" , help = set_transaction_timeout .__doc__
3653+ )
36203654 subparsers .add_parser (
36213655 "query_data_with_new_column" , help = query_data_with_new_column .__doc__
36223656 )
@@ -3783,6 +3817,8 @@ def add_split_points(instance_id, database_id):
37833817 update_data (args .instance_id , args .database_id )
37843818 elif args .command == "set_max_commit_delay" :
37853819 set_max_commit_delay (args .instance_id , args .database_id )
3820+ elif args .command == "set_transaction_timeout" :
3821+ set_transaction_timeout (args .instance_id , args .database_id )
37863822 elif args .command == "query_data_with_new_column" :
37873823 query_data_with_new_column (args .instance_id , args .database_id )
37883824 elif args .command == "read_write_transaction" :
0 commit comments