@@ -169,7 +169,10 @@ def create_database(instance_id, database_id):
169169 SingerId INT64 NOT NULL,
170170 FirstName STRING(1024),
171171 LastName STRING(1024),
172- SingerInfo BYTES(MAX)
172+ SingerInfo BYTES(MAX),
173+ FullName STRING(2048) AS (
174+ ARRAY_TO_STRING([FirstName, LastName], " ")
175+ ) STORED
173176 ) PRIMARY KEY (SingerId)""" ,
174177 """CREATE TABLE Albums (
175178 SingerId INT64 NOT NULL,
@@ -1344,6 +1347,37 @@ def update_albums(transaction):
13441347 # [END spanner_dml_standard_update]
13451348
13461349
1350+ def update_data_with_dml_returning (instance_id , database_id ):
1351+ """Updates sample data from the database using a DML statement having a THEN RETURN clause."""
1352+ # [START spanner_dml_update_returning]
1353+ # instance_id = "your-spanner-instance"
1354+ # database_id = "your-spanner-db-id"
1355+
1356+ spanner_client = spanner .Client ()
1357+ instance = spanner_client .instance (instance_id )
1358+ database = instance .database (database_id )
1359+
1360+ # Update MarketingBudget column for records satisfying
1361+ # a particular condition and returns the modified
1362+ # MarketingBudget column of the updated records using
1363+ # 'THEN RETURN MarketingBudget'.
1364+ # It is also possible to return all columns of all the
1365+ # updated records by using 'THEN RETURN *'.
1366+ def update_albums (transaction ):
1367+ results = transaction .execute_sql (
1368+ "UPDATE Albums "
1369+ "SET MarketingBudget = MarketingBudget * 2 "
1370+ "WHERE SingerId = 1 and AlbumId = 1 "
1371+ "THEN RETURN MarketingBudget"
1372+ )
1373+ for result in results :
1374+ print ("MarketingBudget: {}" .format (* result ))
1375+ print ("{} record(s) updated." .format (results .stats .row_count_exact ))
1376+
1377+ database .run_in_transaction (update_albums )
1378+ # [END spanner_dml_update_returning]
1379+
1380+
13471381def delete_data_with_dml (instance_id , database_id ):
13481382 """Deletes sample data from the database using a DML statement."""
13491383 # [START spanner_dml_standard_delete]
@@ -1365,6 +1399,35 @@ def delete_singers(transaction):
13651399 # [END spanner_dml_standard_delete]
13661400
13671401
1402+ def delete_data_with_dml_returning (instance_id , database_id ):
1403+ """Deletes sample data from the database using a DML statement having a THEN RETURN clause. """
1404+ # [START spanner_dml_delete_returning]
1405+ # instance_id = "your-spanner-instance"
1406+ # database_id = "your-spanner-db-id"
1407+
1408+ spanner_client = spanner .Client ()
1409+ instance = spanner_client .instance (instance_id )
1410+ database = instance .database (database_id )
1411+
1412+ # Delete records from SINGERS table satisfying a
1413+ # particular condition and returns the SingerId
1414+ # and FullName column of the deleted records using
1415+ # 'THEN RETURN SingerId, FullName'.
1416+ # It is also possible to return all columns of all the
1417+ # deleted records by using 'THEN RETURN *'.
1418+ def delete_singers (transaction ):
1419+ results = transaction .execute_sql (
1420+ "DELETE FROM Singers WHERE FirstName = 'David' "
1421+ "THEN RETURN SingerId, FullName"
1422+ )
1423+ for result in results :
1424+ print ("SingerId: {}, FullName: {}" .format (* result ))
1425+ print ("{} record(s) deleted." .format (results .stats .row_count_exact ))
1426+
1427+ database .run_in_transaction (delete_singers )
1428+ # [END spanner_dml_delete_returning]
1429+
1430+
13681431def update_data_with_dml_timestamp (instance_id , database_id ):
13691432 """Updates data with Timestamp from the database using a DML statement."""
13701433 # [START spanner_dml_standard_update_with_timestamp]
@@ -1472,6 +1535,38 @@ def insert_singers(transaction):
14721535 # [END spanner_dml_getting_started_insert]
14731536
14741537
1538+ def insert_with_dml_returning (instance_id , database_id ):
1539+ """Inserts sample data into the given database using a DML statement having a THEN RETURN clause. """
1540+ # [START spanner_dml_insert_returning]
1541+ # instance_id = "your-spanner-instance"
1542+ # database_id = "your-spanner-db-id"
1543+
1544+ spanner_client = spanner .Client ()
1545+ instance = spanner_client .instance (instance_id )
1546+ database = instance .database (database_id )
1547+
1548+ # Insert records into the SINGERS table and returns the
1549+ # generated column FullName of the inserted records using
1550+ # 'THEN RETURN FullName'.
1551+ # It is also possible to return all columns of all the
1552+ # inserted records by using 'THEN RETURN *'.
1553+ def insert_singers (transaction ):
1554+ results = transaction .execute_sql (
1555+ "INSERT INTO Singers (SingerId, FirstName, LastName) VALUES "
1556+ "(21, 'Luann', 'Chizoba'), "
1557+ "(22, 'Denis', 'Patricio'), "
1558+ "(23, 'Felxi', 'Ronan'), "
1559+ "(24, 'Dominik', 'Martyna') "
1560+ "THEN RETURN FullName"
1561+ )
1562+ for result in results :
1563+ print ("FullName: {}" .format (* result ))
1564+ print ("{} record(s) inserted." .format (results .stats .row_count_exact ))
1565+
1566+ database .run_in_transaction (insert_singers )
1567+ # [END spanner_dml_insert_returning]
1568+
1569+
14751570def query_data_with_parameter (instance_id , database_id ):
14761571 """Queries sample data from the database using SQL with a parameter."""
14771572 # [START spanner_query_with_parameter]
@@ -2273,7 +2368,9 @@ def list_instance_config_operations():
22732368 subparsers .add_parser ("insert_data_with_dml" , help = insert_data_with_dml .__doc__ )
22742369 subparsers .add_parser ("log_commit_stats" , help = log_commit_stats .__doc__ )
22752370 subparsers .add_parser ("update_data_with_dml" , help = update_data_with_dml .__doc__ )
2371+ subparsers .add_parser ("update_data_with_dml_returning" , help = update_data_with_dml_returning .__doc__ )
22762372 subparsers .add_parser ("delete_data_with_dml" , help = delete_data_with_dml .__doc__ )
2373+ subparsers .add_parser ("delete_data_with_dml_returning" , help = delete_data_with_dml_returning .__doc__ )
22772374 subparsers .add_parser (
22782375 "update_data_with_dml_timestamp" , help = update_data_with_dml_timestamp .__doc__
22792376 )
@@ -2284,6 +2381,7 @@ def list_instance_config_operations():
22842381 "update_data_with_dml_struct" , help = update_data_with_dml_struct .__doc__
22852382 )
22862383 subparsers .add_parser ("insert_with_dml" , help = insert_with_dml .__doc__ )
2384+ subparsers .add_parser ("insert_with_dml_returning" , help = insert_with_dml_returning .__doc__ )
22872385 subparsers .add_parser (
22882386 "query_data_with_parameter" , help = query_data_with_parameter .__doc__
22892387 )
@@ -2386,8 +2484,12 @@ def list_instance_config_operations():
23862484 log_commit_stats (args .instance_id , args .database_id )
23872485 elif args .command == "update_data_with_dml" :
23882486 update_data_with_dml (args .instance_id , args .database_id )
2487+ elif args .command == "update_data_with_dml_returning" :
2488+ update_data_with_dml_returning (args .instance_id , args .database_id )
23892489 elif args .command == "delete_data_with_dml" :
23902490 delete_data_with_dml (args .instance_id , args .database_id )
2491+ elif args .command == "delete_data_with_dml_returning" :
2492+ delete_data_with_dml_returning (args .instance_id , args .database_id )
23912493 elif args .command == "update_data_with_dml_timestamp" :
23922494 update_data_with_dml_timestamp (args .instance_id , args .database_id )
23932495 elif args .command == "dml_write_read_transaction" :
@@ -2396,6 +2498,8 @@ def list_instance_config_operations():
23962498 update_data_with_dml_struct (args .instance_id , args .database_id )
23972499 elif args .command == "insert_with_dml" :
23982500 insert_with_dml (args .instance_id , args .database_id )
2501+ elif args .command == "insert_with_dml_returning" :
2502+ insert_with_dml_returning (args .instance_id , args .database_id )
23992503 elif args .command == "query_data_with_parameter" :
24002504 query_data_with_parameter (args .instance_id , args .database_id )
24012505 elif args .command == "write_with_dml_transaction" :
0 commit comments