Skip to content
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
80 changes: 80 additions & 0 deletions spanner/cloud-client/snippets.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import argparse
import base64
import datetime
import decimal

from google.cloud import spanner
from google.cloud.spanner_v1 import param_types
Expand Down Expand Up @@ -658,6 +659,57 @@ def query_data_with_timestamp(instance_id, database_id):
# [END spanner_query_data_with_timestamp_column]


# [START spanner_add_numeric_column]
def add_numeric_column(instance_id, database_id):
""" Adds a new NUMERIC column to the Venues table in the example database.
"""
spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)

database = instance.database(database_id)

operation = database.update_ddl([
'ALTER TABLE Venues ADD COLUMN Revenue NUMERIC'])

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

print('Altered table "Venue" on database {} on instance {}.'.format(
database_id, instance_id))
# [END spanner_add_numeric_column]


# [START spanner_update_data_with_numeric_column]
def update_data_with_numeric(instance_id, database_id):
"""Updates Venues tables in the database with the NUMERIC
column.

This updates the `Revenue` column which must be created before
running this sample. You can add the column by running the
`add_numeric_column` sample or by running this DDL statement
against your database:

ALTER TABLE Venues ADD COLUMN Revenue NUMERIC
"""
spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)

database = instance.database(database_id)

with database.batch() as batch:
batch.update(
table='Venues',
columns=('VenueId', 'Revenue'),
values=[
(4, decimal.Decimal("35000")),
(19, decimal.Decimal("104500")),
(42, decimal.Decimal("99999999999999999999999999999.99"))
])

print('Updated data.')
# [END spanner_update_data_with_numeric_column]


# [START spanner_write_data_for_struct_queries]
def write_struct_data(instance_id, database_id):
"""Inserts sample data that can be used to test STRUCT parameters
Expand Down Expand Up @@ -1397,6 +1449,34 @@ def query_data_with_string(instance_id, database_id):
# [END spanner_query_with_string_parameter]


def query_data_with_numeric_parameter(instance_id, database_id):
"""Queries sample data using SQL with a NUMERIC parameter. """
# [START spanner_query_with_numeric_parameter]
# instance_id = "your-spanner-instance"
Comment thread
larkee marked this conversation as resolved.
# database_id = "your-spanner-db-id"
spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

example_numeric = decimal.Decimal("100000")
param = {
'revenue': example_numeric,
}
param_type = {
'revenue': param_types.NUMERIC
}

with database.snapshot() as snapshot:
results = snapshot.execute_sql(
'SELECT VenueId, Revenue FROM Venues '
'WHERE Revenue < @revenue',
params=param, param_types=param_type)

for row in results:
print(u"VenueId: {}, Revenue: {}".format(*row))
# [END spanner_query_with_numeric_parameter]


def query_data_with_timestamp_parameter(instance_id, database_id):
"""Queries sample data using SQL with a TIMESTAMP parameter. """
# [START spanner_query_with_timestamp_parameter]
Expand Down
18 changes: 18 additions & 0 deletions spanner/cloud-client/snippets_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,24 @@ def test_query_data_with_string(capsys):
assert 'VenueId: 42, VenueName: Venue 42' in out


def test_add_numeric_column(capsys):
snippets.add_numeric_column(INSTANCE_ID, DATABASE_ID)
out, _ = capsys.readouterr()
assert 'Altered table "Venue" on database ' in out


def test_update_data_with_numeric(capsys):
snippets.update_data_with_numeric(INSTANCE_ID, DATABASE_ID)
out, _ = capsys.readouterr()
assert 'Updated data' in out


def test_query_data_with_numeric_parameter(capsys):
snippets.query_data_with_numeric_parameter(INSTANCE_ID, DATABASE_ID)
out, _ = capsys.readouterr()
assert 'VenueId: 4, Revenue: 35000' in out


def test_query_data_with_timestamp_parameter(capsys):
snippets.query_data_with_timestamp_parameter(INSTANCE_ID, DATABASE_ID)
out, _ = capsys.readouterr()
Expand Down