Skip to content

Commit 61136e4

Browse files
authored
Add Cloud Spanner Batch DML sample [(#2068)](GoogleCloudPlatform/python-docs-samples#2068)
* Add Cloud Spanner Batch DML sample * Fix test. * Lint. * More Lint.
1 parent 9d6fd8d commit 61136e4

File tree

2 files changed

+52
-6
lines changed

2 files changed

+52
-6
lines changed

samples/samples/snippets.py

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
10421077
if __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)

samples/samples/snippets_test.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,13 +190,13 @@ def test_insert_data_with_timestamp(capsys):
190190
def test_write_struct_data(capsys):
191191
snippets.write_struct_data(INSTANCE_ID, DATABASE_ID)
192192
out, _ = capsys.readouterr()
193-
assert 'Inserted sample data for STRUCT queries'
193+
assert 'Inserted sample data for STRUCT queries' in out
194194

195195

196196
def test_query_with_struct(capsys):
197197
snippets.query_with_struct(INSTANCE_ID, DATABASE_ID)
198198
out, _ = capsys.readouterr()
199-
assert 'SingerId: Elena'
199+
assert 'SingerId: 6' in out
200200

201201

202202
def test_query_with_array_of_struct(capsys):
@@ -277,3 +277,9 @@ def delete_data_with_partitioned_dml(capsys):
277277
snippets.delete_data_with_partitioned_dml(INSTANCE_ID, DATABASE_ID)
278278
out, _ = capsys.readouterr()
279279
assert "5 record(s) deleted" in out
280+
281+
282+
def update_with_batch_dml(capsys):
283+
snippets.update_with_batch_dml(INSTANCE_ID, DATABASE_ID)
284+
out, _ = capsys.readouterr()
285+
assert "Executed 2 SQL statements using Batch DML" in out

0 commit comments

Comments
 (0)