3131from google .cloud import spanner
3232from google .cloud .spanner_admin_instance_v1 .types import spanner_instance_admin
3333from google .cloud .spanner_v1 import param_types
34- from google .type import expr_pb2
35- from google .iam .v1 import policy_pb2
3634from google .cloud .spanner_v1 .data_types import JsonObject
35+ from google .iam .v1 import policy_pb2
3736from google .protobuf import field_mask_pb2 # type: ignore
37+ from google .type import expr_pb2
38+
3839OPERATION_TIMEOUT_SECONDS = 240
3940
4041
@@ -196,6 +197,43 @@ def create_database(instance_id, database_id):
196197# [END spanner_create_database]
197198
198199
200+ # [START spanner_update_database_drop_protection]
201+ def update_database_drop_protection (instance_id , database_id ):
202+ """Updates the drop protection setting for a database by first enabling and then disabling it."""
203+ spanner_client = spanner .Client ()
204+ instance = spanner_client .instance (instance_id )
205+
206+ db = instance .database (database_id )
207+ db .drop_protection_enabled = True
208+
209+ operation = db .update ()
210+
211+ print ("Waiting for operation to complete..." )
212+ operation .result (OPERATION_TIMEOUT_SECONDS )
213+
214+ print (
215+ "Drop protection for database {} updated to {}" .format (
216+ db .name , db .drop_protection_enabled
217+ )
218+ )
219+
220+ db .drop_protection_enabled = False
221+
222+ operation = db .update ()
223+
224+ print ("Waiting for operation to complete..." )
225+ operation .result (OPERATION_TIMEOUT_SECONDS )
226+
227+ print (
228+ "Drop protection for database {} updated to {}" .format (
229+ db .name , db .drop_protection_enabled
230+ )
231+ )
232+
233+
234+ # [END spanner_update_database_drop_protection]
235+
236+
199237# [START spanner_create_database_with_encryption_key]
200238def create_database_with_encryption_key (instance_id , database_id , kms_key_name ):
201239 """Creates a database with tables using a Customer Managed Encryption Key (CMEK)."""
@@ -1402,7 +1440,7 @@ def delete_singers(transaction):
14021440
14031441
14041442def delete_data_with_dml_returning (instance_id , database_id ):
1405- """Deletes sample data from the database using a DML statement having a THEN RETURN clause. """
1443+ """Deletes sample data from the database using a DML statement having a THEN RETURN clause."""
14061444 # [START spanner_dml_delete_returning]
14071445 # instance_id = "your-spanner-instance"
14081446 # database_id = "your-spanner-db-id"
@@ -1538,7 +1576,7 @@ def insert_singers(transaction):
15381576
15391577
15401578def insert_with_dml_returning (instance_id , database_id ):
1541- """Inserts sample data into the given database using a DML statement having a THEN RETURN clause. """
1579+ """Inserts sample data into the given database using a DML statement having a THEN RETURN clause."""
15421580 # [START spanner_dml_insert_returning]
15431581 # instance_id = "your-spanner-instance"
15441582 # database_id = "your-spanner-db-id"
@@ -1727,7 +1765,7 @@ def update_albums(transaction):
17271765
17281766
17291767def create_table_with_datatypes (instance_id , database_id ):
1730- """Creates a table with supported datatypes. """
1768+ """Creates a table with supported datatypes."""
17311769 # [START spanner_create_table_with_datatypes]
17321770 # instance_id = "your-spanner-instance"
17331771 # database_id = "your-spanner-db-id"
@@ -2460,7 +2498,9 @@ def enable_fine_grained_access(
24602498 query_data_with_index_parser .add_argument ("--end_title" , default = "Goo" )
24612499 subparsers .add_parser ("read_data_with_index" , help = read_data_with_index .__doc__ )
24622500 subparsers .add_parser ("add_storing_index" , help = add_storing_index .__doc__ )
2463- subparsers .add_parser ("read_data_with_storing_index" , help = read_data_with_storing_index .__doc__ )
2501+ subparsers .add_parser (
2502+ "read_data_with_storing_index" , help = read_data_with_storing_index .__doc__
2503+ )
24642504 subparsers .add_parser (
24652505 "create_table_with_timestamp" , help = create_table_with_timestamp .__doc__
24662506 )
@@ -2486,9 +2526,13 @@ def enable_fine_grained_access(
24862526 subparsers .add_parser ("insert_data_with_dml" , help = insert_data_with_dml .__doc__ )
24872527 subparsers .add_parser ("log_commit_stats" , help = log_commit_stats .__doc__ )
24882528 subparsers .add_parser ("update_data_with_dml" , help = update_data_with_dml .__doc__ )
2489- subparsers .add_parser ("update_data_with_dml_returning" , help = update_data_with_dml_returning .__doc__ )
2529+ subparsers .add_parser (
2530+ "update_data_with_dml_returning" , help = update_data_with_dml_returning .__doc__
2531+ )
24902532 subparsers .add_parser ("delete_data_with_dml" , help = delete_data_with_dml .__doc__ )
2491- subparsers .add_parser ("delete_data_with_dml_returning" , help = delete_data_with_dml_returning .__doc__ )
2533+ subparsers .add_parser (
2534+ "delete_data_with_dml_returning" , help = delete_data_with_dml_returning .__doc__
2535+ )
24922536 subparsers .add_parser (
24932537 "update_data_with_dml_timestamp" , help = update_data_with_dml_timestamp .__doc__
24942538 )
@@ -2499,7 +2543,9 @@ def enable_fine_grained_access(
24992543 "update_data_with_dml_struct" , help = update_data_with_dml_struct .__doc__
25002544 )
25012545 subparsers .add_parser ("insert_with_dml" , help = insert_with_dml .__doc__ )
2502- subparsers .add_parser ("insert_with_dml_returning" , help = insert_with_dml_returning .__doc__ )
2546+ subparsers .add_parser (
2547+ "insert_with_dml_returning" , help = insert_with_dml_returning .__doc__
2548+ )
25032549 subparsers .add_parser (
25042550 "query_data_with_parameter" , help = query_data_with_parameter .__doc__
25052551 )
0 commit comments