docs(spanner): snippet for setting read lock mode (#1473) · googleapis/python-spanner@7e79920
@@ -3186,14 +3186,13 @@ def isolation_level_options(
31863186instance_id,
31873187database_id,
31883188):
3189-from google.cloud.spanner_v1 import TransactionOptions, DefaultTransactionOptions
3190-31913189"""
31923190 Shows how to run a Read Write transaction with isolation level options.
31933191 """
31943192# [START spanner_isolation_level]
31953193# instance_id = "your-spanner-instance"
31963194# database_id = "your-spanner-db-id"
3195+from google.cloud.spanner_v1 import TransactionOptions, DefaultTransactionOptions
3197319631983197# The isolation level specified at the client-level will be applied to all RW transactions.
31993198isolation_options_for_client = TransactionOptions.IsolationLevel.SERIALIZABLE
@@ -3232,6 +3231,60 @@ def update_albums_with_isolation(transaction):
32323231# [END spanner_isolation_level]
32333232323432333234+def read_lock_mode_options(
3235+instance_id,
3236+database_id,
3237+):
3238+"""
3239+ Shows how to run a Read Write transaction with read lock mode options.
3240+ """
3241+# [START spanner_read_lock_mode]
3242+# instance_id = "your-spanner-instance"
3243+# database_id = "your-spanner-db-id"
3244+from google.cloud.spanner_v1 import TransactionOptions, DefaultTransactionOptions
3245+3246+# The read lock mode specified at the client-level will be applied to all
3247+# RW transactions.
3248+read_lock_mode_options_for_client = TransactionOptions.ReadWrite.ReadLockMode.OPTIMISTIC
3249+3250+# Create a client that uses Serializable isolation (default) with
3251+# optimistic locking for read-write transactions.
3252+spanner_client = spanner.Client(
3253+default_transaction_options=DefaultTransactionOptions(
3254+read_lock_mode=read_lock_mode_options_for_client
3255+ )
3256+ )
3257+instance = spanner_client.instance(instance_id)
3258+database = instance.database(database_id)
3259+3260+# The read lock mode specified at the request level takes precedence over
3261+# the read lock mode configured at the client level.
3262+read_lock_mode_options_for_transaction = (
3263+TransactionOptions.ReadWrite.ReadLockMode.PESSIMISTIC
3264+ )
3265+3266+def update_albums_with_read_lock_mode(transaction):
3267+# Read an AlbumTitle.
3268+results = transaction.execute_sql(
3269+"SELECT AlbumTitle from Albums WHERE SingerId = 2 and AlbumId = 1"
3270+ )
3271+for result in results:
3272+print("Current Album Title: {}".format(*result))
3273+3274+# Update the AlbumTitle.
3275+row_ct = transaction.execute_update(
3276+"UPDATE Albums SET AlbumTitle = 'A New Title' WHERE SingerId = 2 and AlbumId = 1"
3277+ )
3278+3279+print("{} record(s) updated.".format(row_ct))
3280+3281+database.run_in_transaction(
3282+update_albums_with_read_lock_mode,
3283+read_lock_mode=read_lock_mode_options_for_transaction
3284+ )
3285+# [END spanner_read_lock_mode]
3286+3287+32353288def set_custom_timeout_and_retry(instance_id, database_id):
32363289"""Executes a snapshot read with custom timeout and retry."""
32373290# [START spanner_set_custom_timeout_and_retry]
@@ -3856,6 +3909,9 @@ def add_split_points(instance_id, database_id):
38563909subparsers.add_parser(
38573910"isolation_level_options", help=isolation_level_options.__doc__
38583911 )
3912+subparsers.add_parser(
3913+"read_lock_mode_options", help=read_lock_mode_options.__doc__
3914+ )
38593915subparsers.add_parser(
38603916"set_custom_timeout_and_retry", help=set_custom_timeout_and_retry.__doc__
38613917 )
@@ -4018,6 +4074,8 @@ def add_split_points(instance_id, database_id):
40184074directed_read_options(args.instance_id, args.database_id)
40194075elif args.command == "isolation_level_options":
40204076isolation_level_options(args.instance_id, args.database_id)
4077+elif args.command == "read_lock_mode_options":
4078+read_lock_mode_options(args.instance_id, args.database_id)
40214079elif args.command == "set_custom_timeout_and_retry":
40224080set_custom_timeout_and_retry(args.instance_id, args.database_id)
40234081elif args.command == "create_instance_with_autoscaling_config":