|
24 | 24 | import base64 |
25 | 25 | import datetime |
26 | 26 | import decimal |
| 27 | +import json |
27 | 28 | import logging |
28 | 29 | import time |
29 | 30 |
|
@@ -1012,6 +1013,81 @@ def update_data_with_numeric(instance_id, database_id): |
1012 | 1013 | # [END spanner_update_data_with_numeric_column] |
1013 | 1014 |
|
1014 | 1015 |
|
| 1016 | +# [START spanner_add_json_column] |
| 1017 | +def add_json_column(instance_id, database_id): |
| 1018 | + """ Adds a new JSON column to the Venues table in the example database. |
| 1019 | + """ |
| 1020 | + spanner_client = spanner.Client() |
| 1021 | + instance = spanner_client.instance(instance_id) |
| 1022 | + |
| 1023 | + database = instance.database(database_id) |
| 1024 | + |
| 1025 | + operation = database.update_ddl(["ALTER TABLE Venues ADD COLUMN VenueDetails JSON"]) |
| 1026 | + |
| 1027 | + print("Waiting for operation to complete...") |
| 1028 | + operation.result(OPERATION_TIMEOUT_SECONDS) |
| 1029 | + |
| 1030 | + print( |
| 1031 | + 'Altered table "Venues" on database {} on instance {}.'.format( |
| 1032 | + database_id, instance_id |
| 1033 | + ) |
| 1034 | + ) |
| 1035 | + |
| 1036 | + |
| 1037 | +# [END spanner_add_json_column] |
| 1038 | + |
| 1039 | + |
| 1040 | +# [START spanner_update_data_with_json_column] |
| 1041 | +def update_data_with_json(instance_id, database_id): |
| 1042 | + """Updates Venues tables in the database with the JSON |
| 1043 | + column. |
| 1044 | +
|
| 1045 | + This updates the `VenueDetails` column which must be created before |
| 1046 | + running this sample. You can add the column by running the |
| 1047 | + `add_json_column` sample or by running this DDL statement |
| 1048 | + against your database: |
| 1049 | +
|
| 1050 | + ALTER TABLE Venues ADD COLUMN VenueDetails JSON |
| 1051 | + """ |
| 1052 | + spanner_client = spanner.Client() |
| 1053 | + instance = spanner_client.instance(instance_id) |
| 1054 | + |
| 1055 | + database = instance.database(database_id) |
| 1056 | + |
| 1057 | + with database.batch() as batch: |
| 1058 | + batch.update( |
| 1059 | + table="Venues", |
| 1060 | + columns=("VenueId", "VenueDetails"), |
| 1061 | + values=[ |
| 1062 | + ( |
| 1063 | + 4, |
| 1064 | + json.dumps( |
| 1065 | + [ |
| 1066 | + {"name": "room 1", "open": True}, |
| 1067 | + {"name": "room 2", "open": False}, |
| 1068 | + ] |
| 1069 | + ), |
| 1070 | + ), |
| 1071 | + (19, json.dumps({"rating": 9, "open": True})), |
| 1072 | + ( |
| 1073 | + 42, |
| 1074 | + json.dumps( |
| 1075 | + { |
| 1076 | + "name": None, |
| 1077 | + "open": {"Monday": True, "Tuesday": False}, |
| 1078 | + "tags": ["large", "airy"], |
| 1079 | + } |
| 1080 | + ), |
| 1081 | + ), |
| 1082 | + ], |
| 1083 | + ) |
| 1084 | + |
| 1085 | + print("Updated data.") |
| 1086 | + |
| 1087 | + |
| 1088 | +# [END spanner_update_data_with_json_column] |
| 1089 | + |
| 1090 | + |
1015 | 1091 | # [START spanner_write_data_for_struct_queries] |
1016 | 1092 | def write_struct_data(instance_id, database_id): |
1017 | 1093 | """Inserts sample data that can be used to test STRUCT parameters |
@@ -1860,6 +1936,34 @@ def query_data_with_numeric_parameter(instance_id, database_id): |
1860 | 1936 | # [END spanner_query_with_numeric_parameter] |
1861 | 1937 |
|
1862 | 1938 |
|
| 1939 | +def query_data_with_json_parameter(instance_id, database_id): |
| 1940 | + """Queries sample data using SQL with a JSON parameter. """ |
| 1941 | + # [START spanner_query_with_json_parameter] |
| 1942 | + # instance_id = "your-spanner-instance" |
| 1943 | + # database_id = "your-spanner-db-id" |
| 1944 | + spanner_client = spanner.Client() |
| 1945 | + instance = spanner_client.instance(instance_id) |
| 1946 | + database = instance.database(database_id) |
| 1947 | + |
| 1948 | + example_json = json.dumps({"rating": 9}) |
| 1949 | + param = {"details": example_json} |
| 1950 | + param_type = {"details": param_types.JSON} |
| 1951 | + |
| 1952 | + with database.snapshot() as snapshot: |
| 1953 | + results = snapshot.execute_sql( |
| 1954 | + "SELECT VenueId, VenueDetails " |
| 1955 | + "FROM Venues " |
| 1956 | + "WHERE JSON_VALUE(VenueDetails, '$.rating') = " |
| 1957 | + "JSON_VALUE(@details, '$.rating')", |
| 1958 | + params=param, |
| 1959 | + param_types=param_type, |
| 1960 | + ) |
| 1961 | + |
| 1962 | + for row in results: |
| 1963 | + print(u"VenueId: {}, VenueDetails: {}".format(*row)) |
| 1964 | + # [END spanner_query_with_json_parameter] |
| 1965 | + |
| 1966 | + |
1863 | 1967 | def query_data_with_timestamp_parameter(instance_id, database_id): |
1864 | 1968 | """Queries sample data using SQL with a TIMESTAMP parameter. """ |
1865 | 1969 | # [START spanner_query_with_timestamp_parameter] |
|
0 commit comments