@@ -701,7 +701,7 @@ def query_with_array_of_struct(instance_id, database_id):
701701 param_types = {'names' : param_types .Array (name_type )})
702702
703703 for row in results :
704- print (u'SingerId: {}' .format (* row ))
704+ print (u'SingerId: {}' .format (* row ))
705705 # [END spanner_query_data_with_array_of_struct]
706706
707707
@@ -725,7 +725,7 @@ def query_struct_field(instance_id, database_id):
725725 param_types = {'name' : name_type })
726726
727727 for row in results :
728- print (u'SingerId: {}' .format (* row ))
728+ print (u'SingerId: {}' .format (* row ))
729729# [START spanner_field_access_on_struct_parameters]
730730
731731
@@ -768,7 +768,7 @@ def query_nested_struct_field(instance_id, database_id):
768768 )
769769
770770 for row in results :
771- print (u'SingerId: {} SongName: {}' .format (* row ))
771+ print (u'SingerId: {} SongName: {}' .format (* row ))
772772# [END spanner_field_access_on_nested_struct_parameters]
773773
774774
@@ -998,7 +998,7 @@ def transfer_budget(transaction):
998998 )
999999
10001000 print ("Transferred {} from Album1's budget to Album2's" .format (
1001- transfer_amount ))
1001+ transfer_amount ))
10021002
10031003 database .run_in_transaction (transfer_budget )
10041004 # [END spanner_dml_getting_started_update]
@@ -1039,6 +1039,41 @@ def delete_data_with_partitioned_dml(instance_id, database_id):
10391039 # [END spanner_dml_partitioned_delete]
10401040
10411041
1042+ def update_with_batch_dml (instance_id , database_id ):
1043+ """Updates sample data in the database using Batch DML. """
1044+ # [START spanner_dml_batch_update]
1045+ # instance_id = "your-spanner-instance"
1046+ # database_id = "your-spanner-db-id"
1047+
1048+ spanner_client = spanner .Client ()
1049+ instance = spanner_client .instance (instance_id )
1050+ database = instance .database (database_id )
1051+
1052+ insert_statement = (
1053+ "INSERT INTO Albums "
1054+ "(SingerId, AlbumId, AlbumTitle, MarketingBudget) "
1055+ "VALUES (1, 3, 'Test Album Title', 10000)"
1056+ )
1057+
1058+ update_statement = (
1059+ "UPDATE Albums "
1060+ "SET MarketingBudget = MarketingBudget * 2 "
1061+ "WHERE SingerId = 1 and AlbumId = 3"
1062+ )
1063+
1064+ def update_albums (transaction ):
1065+ row_cts = transaction .batch_update ([
1066+ insert_statement ,
1067+ update_statement ,
1068+ ])
1069+
1070+ print ("Executed {} SQL statements using Batch DML." .format (
1071+ len (row_cts )))
1072+
1073+ database .run_in_transaction (update_albums )
1074+ # [END spanner_dml_batch_update]
1075+
1076+
10421077if __name__ == '__main__' : # noqa: C901
10431078 parser = argparse .ArgumentParser (
10441079 description = __doc__ ,
@@ -1118,6 +1153,9 @@ def delete_data_with_partitioned_dml(instance_id, database_id):
11181153 subparsers .add_parser (
11191154 'delete_data_with_partitioned_dml' ,
11201155 help = delete_data_with_partitioned_dml .__doc__ )
1156+ subparsers .add_parser (
1157+ 'update_with_batch_dml' ,
1158+ help = update_with_batch_dml .__doc__ )
11211159
11221160 args = parser .parse_args ()
11231161
@@ -1195,3 +1233,5 @@ def delete_data_with_partitioned_dml(instance_id, database_id):
11951233 update_data_with_partitioned_dml (args .instance_id , args .database_id )
11961234 elif args .command == 'delete_data_with_partitioned_dml' :
11971235 delete_data_with_partitioned_dml (args .instance_id , args .database_id )
1236+ elif args .command == 'update_with_batch_dml' :
1237+ update_with_batch_dml (args .instance_id , args .database_id )
0 commit comments