@@ -169,7 +169,10 @@ def create_database(instance_id, database_id):
169
169
SingerId INT64 NOT NULL,
170
170
FirstName STRING(1024),
171
171
LastName STRING(1024),
172
- SingerInfo BYTES(MAX)
172
+ SingerInfo BYTES(MAX),
173
+ FullName STRING(2048) AS (
174
+ ARRAY_TO_STRING([FirstName, LastName], " ")
175
+ ) STORED
173
176
) PRIMARY KEY (SingerId)""" ,
174
177
"""CREATE TABLE Albums (
175
178
SingerId INT64 NOT NULL,
@@ -1344,6 +1347,37 @@ def update_albums(transaction):
1344
1347
# [END spanner_dml_standard_update]
1345
1348
1346
1349
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
+
1347
1381
def delete_data_with_dml (instance_id , database_id ):
1348
1382
"""Deletes sample data from the database using a DML statement."""
1349
1383
# [START spanner_dml_standard_delete]
@@ -1365,6 +1399,35 @@ def delete_singers(transaction):
1365
1399
# [END spanner_dml_standard_delete]
1366
1400
1367
1401
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
+
1368
1431
def update_data_with_dml_timestamp (instance_id , database_id ):
1369
1432
"""Updates data with Timestamp from the database using a DML statement."""
1370
1433
# [START spanner_dml_standard_update_with_timestamp]
@@ -1472,6 +1535,38 @@ def insert_singers(transaction):
1472
1535
# [END spanner_dml_getting_started_insert]
1473
1536
1474
1537
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
+
1475
1570
def query_data_with_parameter (instance_id , database_id ):
1476
1571
"""Queries sample data from the database using SQL with a parameter."""
1477
1572
# [START spanner_query_with_parameter]
@@ -2273,7 +2368,9 @@ def list_instance_config_operations():
2273
2368
subparsers .add_parser ("insert_data_with_dml" , help = insert_data_with_dml .__doc__ )
2274
2369
subparsers .add_parser ("log_commit_stats" , help = log_commit_stats .__doc__ )
2275
2370
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__ )
2276
2372
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__ )
2277
2374
subparsers .add_parser (
2278
2375
"update_data_with_dml_timestamp" , help = update_data_with_dml_timestamp .__doc__
2279
2376
)
@@ -2284,6 +2381,7 @@ def list_instance_config_operations():
2284
2381
"update_data_with_dml_struct" , help = update_data_with_dml_struct .__doc__
2285
2382
)
2286
2383
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__ )
2287
2385
subparsers .add_parser (
2288
2386
"query_data_with_parameter" , help = query_data_with_parameter .__doc__
2289
2387
)
@@ -2386,8 +2484,12 @@ def list_instance_config_operations():
2386
2484
log_commit_stats (args .instance_id , args .database_id )
2387
2485
elif args .command == "update_data_with_dml" :
2388
2486
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 )
2389
2489
elif args .command == "delete_data_with_dml" :
2390
2490
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 )
2391
2493
elif args .command == "update_data_with_dml_timestamp" :
2392
2494
update_data_with_dml_timestamp (args .instance_id , args .database_id )
2393
2495
elif args .command == "dml_write_read_transaction" :
@@ -2396,6 +2498,8 @@ def list_instance_config_operations():
2396
2498
update_data_with_dml_struct (args .instance_id , args .database_id )
2397
2499
elif args .command == "insert_with_dml" :
2398
2500
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 )
2399
2503
elif args .command == "query_data_with_parameter" :
2400
2504
query_data_with_parameter (args .instance_id , args .database_id )
2401
2505
elif args .command == "write_with_dml_transaction" :
0 commit comments