samples: add default leader options samples by zoercai · Pull Request #428 · googleapis/python-spanner · GitHub
Skip to content
This repository was archived by the owner on Jun 8, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions samples/samples/conftest.py
153 changes: 153 additions & 0 deletions samples/samples/snippets.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,53 @@ def create_instance_with_processing_units(instance_id, processing_units):
# [END spanner_create_instance_with_processing_units]


# [START spanner_get_instance_config]
def get_instance_config(instance_config):
"""Gets the leader options for the instance configuration."""
spanner_client = spanner.Client()
config_name = "{}/instanceConfigs/{}".format(spanner_client.project_name, instance_config)
config = spanner_client.instance_admin_api.get_instance_config(name=config_name)
print("Available leader options for instance config {}: {}".format(
instance_config, config.leader_options))


# [END spanner_get_instance_config]


# [START spanner_list_instance_configs]
def list_instance_config():
"""Lists the available instance configurations."""
spanner_client = spanner.Client()
configs = spanner_client.list_instance_configs()
for config in configs:
print(
"Available leader options for instance config {}: {}".format(
config.name, config.leader_options
)
)


# [END spanner_list_instance_configs]


# [START spanner_list_databases]
def list_databases(instance_id):
"""Lists databases and their leader options."""
spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)

databases = list(instance.list_databases())
for database in databases:
print(
"Database {} has default leader {}".format(
database.name, database.default_leader
)
)


# [END spanner_list_databases]


# [START spanner_create_database]
def create_database(instance_id, database_id):
"""Creates a database and tables for sample data."""
Expand Down Expand Up @@ -168,6 +215,112 @@ def create_database_with_encryption_key(instance_id, database_id, kms_key_name):
# [END spanner_create_database_with_encryption_key]


# [START spanner_create_database_with_default_leader]
def create_database_with_default_leader(
instance_id, database_id, default_leader
):
"""Creates a database with tables with a default leader."""
spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)

database = instance.database(
database_id,
ddl_statements=[
"""CREATE TABLE Singers (
SingerId INT64 NOT NULL,
FirstName STRING(1024),
LastName STRING(1024),
SingerInfo BYTES(MAX)
) PRIMARY KEY (SingerId)""",
"""CREATE TABLE Albums (
SingerId INT64 NOT NULL,
AlbumId INT64 NOT NULL,
AlbumTitle STRING(MAX)
) PRIMARY KEY (SingerId, AlbumId),
INTERLEAVE IN PARENT Singers ON DELETE CASCADE""",
"ALTER DATABASE {}"
" SET OPTIONS (default_leader = '{}')".format(database_id, default_leader),
],
)
operation = database.create()

print("Waiting for operation to complete...")
operation.result(120)

database.reload()

print(
"Database {} created with default leader {}".format(
database.name, database.default_leader
)
)


# [END spanner_create_database_with_default_leader]


# [START spanner_update_database_with_default_leader]
def update_database_with_default_leader(
instance_id, database_id, default_leader
):
"""Updates a database with tables with a default leader."""
spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)

database = instance.database(database_id)

operation = database.update_ddl(["ALTER DATABASE {}"
" SET OPTIONS (default_leader = '{}')".format(database_id, default_leader)])
operation.result(120)

database.reload()

print(
"Database {} updated with default leader {}".format(
database.name, database.default_leader
)
)


# [END spanner_update_database_with_default_leader]


# [START spanner_get_database_ddl]
def get_database_ddl(instance_id, database_id):
"""Gets the database DDL statements."""
spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)
ddl = spanner_client.database_admin_api.get_database_ddl(database=database.name)
print("Retrieved database DDL for {}".format(database_id))
for statement in ddl.statements:
print(statement)


# [END spanner_get_database_ddl]


# [START spanner_query_information_schema_database_options]
def query_information_schema_database_options(instance_id, database_id):
"""Queries the default leader of a database."""
spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)
with database.snapshot() as snapshot:
results = snapshot.execute_sql(
"SELECT OPTION_VALUE AS default_leader "
"FROM INFORMATION_SCHEMA.DATABASE_OPTIONS "
"WHERE SCHEMA_NAME = '' AND OPTION_NAME = 'default_leader'"
)
for result in results:
print("Database {} has default leader {}".format(
database_id, result[0]
))


# [END spanner_query_information_schema_database_options]


# [START spanner_insert_data]
def insert_data(instance_id, database_id):
"""Inserts sample data into the given database.
Expand Down
64 changes: 64 additions & 0 deletions samples/samples/snippets_test.py