datastore/cloud-client/snippets.py (525 lines of code) (raw):
# Copyright 2016 Google, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from google.cloud import datastore # noqa: I100
def _preamble():
# [START datastore_incomplete_key]
# [START datastore_named_key]
# [START datastore_key_with_parent]
# [START datastore_key_with_multilevel_parent]
# [START datastore_basic_entity]
# [START datastore_entity_with_parent]
# [START datastore_properties]
# [START datastore_array_value]
# [START datastore_upsert]
# [START datastore_insert]
# [START datastore_update]
# [START datastore_lookup]
# [START datastore_delete]
# [START datastore_batch_upsert]
# [START datastore_batch_lookup]
# [START datastore_batch_delete]
# [START datastore_unindexed_property_query]
# [START datastore_basic_query]
# [START datastore_projection_query]
# [START datastore_ancestor_query]
# [START datastore_run_query]
# [START datastore_limit]
# [START datastore_cursor_paging]
# [START datastore_property_filter]
# [START datastore_composite_filter]
# [START datastore_key_filter]
# [START datastore_ascending_sort]
# [START datastore_descending_sort]
# [START datastore_multi_sort]
# [START datastore_keys_only_query]
# [START datastore_distinct_on_query]
# [START datastore_kindless_query]
# [START datastore_inequality_range]
# [START datastore_inequality_invalid]
# [START datastore_equal_and_inequality_range]
# [START datastore_inequality_sort]
# [START datastore_inequality_sort_invalid_not_same]
# [START datastore_inequality_sort_invalid_not_first]
# [START datastore_array_value_inequality_range]
# [START datastore_array_value_equality]
# [START datastore_exploding_properties]
# [START datastore_transactional_update]
# [START datastore_transactional_retry]
# [START datastore_transactional_get_or_create]
# [START datastore_transactional_single_entity_group_read_only]
# [START datastore_namespace_run_query]
# [START datastore_kind_run_query]
# [START datastore_property_run_query]
# [START datastore_property_by_kind_run_query]
# [START datastore_eventual_consistent_query]
# [START datastore_built_in_index_queries]
# [START datastore_merged_index_query]
# [START datastore_merged_index_tag_queries]
# [START datastore_owner_size_tag_query]
# [START datastore_size_coloration_query]
from google.cloud import datastore
# For help authenticating your client, visit
# https://cloud.google.com/docs/authentication/getting-started
client = datastore.Client()
# [END datastore_incomplete_key]
# [END datastore_named_key]
# [END datastore_key_with_parent]
# [END datastore_key_with_multilevel_parent]
# [END datastore_basic_entity]
# [END datastore_entity_with_parent]
# [END datastore_properties]
# [END datastore_array_value]
# [END datastore_upsert]
# [END datastore_insert]
# [END datastore_update]
# [END datastore_lookup]
# [END datastore_delete]
# [END datastore_batch_upsert]
# [END datastore_batch_lookup]
# [END datastore_batch_delete]
# [END datastore_unindexed_property_query]
# [END datastore_basic_query]
# [END datastore_projection_query]
# [END datastore_ancestor_query]
# [END datastore_run_query]
# [END datastore_limit]
# [END datastore_cursor_paging]
# [END datastore_property_filter]
# [END datastore_composite_filter]
# [END datastore_key_filter]
# [END datastore_ascending_sort]
# [END datastore_descending_sort]
# [END datastore_multi_sort]
# [END datastore_keys_only_query]
# [END datastore_distinct_on_query]
# [END datastore_kindless_query]
# [END datastore_inequality_range]
# [END datastore_inequality_invalid]
# [END datastore_equal_and_inequality_range]
# [END datastore_inequality_sort]
# [END datastore_inequality_sort_invalid_not_same]
# [END datastore_inequality_sort_invalid_not_first]
# [END datastore_array_value_inequality_range]
# [END datastore_array_value_equality]
# [END datastore_exploding_properties]
# [END datastore_transactional_update]
# [END datastore_transactional_retry]
# [END datastore_transactional_get_or_create]
# [END datastore_transactional_single_entity_group_read_only]
# [END datastore_namespace_run_query]
# [END datastore_kind_run_query]
# [END datastore_property_run_query]
# [END datastore_property_by_kind_run_query]
# [END datastore_eventual_consistent_query]
# [END datastore_built_in_index_queries]
# [END datastore_merged_index_query]
# [END datastore_merged_index_tag_queries]
# [END datastore_owner_size_tag_query]
# [END datastore_size_coloration_query]
assert client is not None
def incomplete_key(client):
# [START datastore_incomplete_key]
key = client.key("Task")
# [END datastore_incomplete_key]
return key
def named_key(client):
# [START datastore_named_key]
key = client.key("Task", "sampleTask")
# [END datastore_named_key]
return key
def key_with_parent(client):
# [START datastore_key_with_parent]
key = client.key("TaskList", "default", "Task", "sampleTask")
# Alternatively
parent_key = client.key("TaskList", "default")
key = client.key("Task", "sampleTask", parent=parent_key)
# [END datastore_key_with_parent]
return key
def key_with_multilevel_parent(client):
# [START datastore_key_with_multilevel_parent]
key = client.key("User", "alice", "TaskList", "default", "Task", "sampleTask")
# [END datastore_key_with_multilevel_parent]
return key
def basic_entity(client):
# [START datastore_basic_entity]
task = datastore.Entity(client.key("Task"))
task.update(
{
"category": "Personal",
"done": False,
"priority": 4,
"description": "Learn Cloud Datastore",
}
)
# [END datastore_basic_entity]
return task
def entity_with_parent(client):
# [START datastore_entity_with_parent]
key_with_parent = client.key("TaskList", "default", "Task", "sampleTask")
task = datastore.Entity(key=key_with_parent)
task.update(
{
"category": "Personal",
"done": False,
"priority": 4,
"description": "Learn Cloud Datastore",
}
)
# [END datastore_entity_with_parent]
return task
def properties(client):
# [START datastore_properties]
import datetime
key = client.key("Task")
task = datastore.Entity(key, exclude_from_indexes=("description",))
task.update(
{
"category": "Personal",
"description": "Learn Cloud Datastore",
"created": datetime.datetime.now(tz=datetime.timezone.utc),
"done": False,
"priority": 4,
"percent_complete": 10.5,
}
)
client.put(task)
# [END datastore_properties]
return task
def array_value(client):
# [START datastore_array_value]
key = client.key("Task")
task = datastore.Entity(key)
task.update({"tags": ["fun", "programming"], "collaborators": ["alice", "bob"]})
# [END datastore_array_value]
return task
def upsert(client):
# [START datastore_upsert]
complete_key = client.key("Task", "sampleTask")
task = datastore.Entity(key=complete_key)
task.update(
{
"category": "Personal",
"done": False,
"priority": 4,
"description": "Learn Cloud Datastore",
}
)
client.put(task)
# [END datastore_upsert]
return task
def insert(client):
# [START datastore_insert]
with client.transaction():
incomplete_key = client.key("Task")
task = datastore.Entity(key=incomplete_key)
task.update(
{
"category": "Personal",
"done": False,
"priority": 4,
"description": "Learn Cloud Datastore",
}
)
client.put(task)
# [END datastore_insert]
return task
def update(client):
# Create the entity we're going to update.
upsert(client)
# [START datastore_update]
with client.transaction():
key = client.key("Task", "sampleTask")
task = client.get(key)
task["done"] = True
client.put(task)
# [END datastore_update]
return task
def lookup(client):
# Create the entity that we're going to look up.
upsert(client)
# [START datastore_lookup]
key = client.key("Task", "sampleTask")
task = client.get(key)
# [END datastore_lookup]
return task
def delete(client):
# Create the entity we're going to delete.
upsert(client)
# [START datastore_delete]
key = client.key("Task", "sampleTask")
client.delete(key)
# [END datastore_delete]
return key
def batch_upsert(client):
# [START datastore_batch_upsert]
task1 = datastore.Entity(client.key("Task", 1))
task1.update(
{
"category": "Personal",
"done": False,
"priority": 4,
"description": "Learn Cloud Datastore",
}
)
task2 = datastore.Entity(client.key("Task", 2))
task2.update(
{
"category": "Work",
"done": False,
"priority": 8,
"description": "Integrate Cloud Datastore",
}
)
client.put_multi([task1, task2])
# [END datastore_batch_upsert]
return task1, task2
def batch_lookup(client):
# Create the entities we will lookup.
batch_upsert(client)
# [START datastore_batch_lookup]
keys = [client.key("Task", 1), client.key("Task", 2)]
tasks = client.get_multi(keys)
# [END datastore_batch_lookup]
return tasks
def batch_delete(client):
# Create the entities we will delete.
batch_upsert(client)
# [START datastore_batch_delete]
keys = [client.key("Task", 1), client.key("Task", 2)]
client.delete_multi(keys)
# [END datastore_batch_delete]
return keys
def unindexed_property_query(client):
# Create the entity that we're going to query.
upsert(client)
# [START datastore_unindexed_property_query]
query = client.query(kind="Task")
query.add_filter(
filter=datastore.query.PropertyFilter(
"description", "=", "Learn Cloud Datastore"
)
)
# [END datastore_unindexed_property_query]
return list(query.fetch())
def basic_query(client):
# Create the entity that we're going to query.
upsert(client)
# [START datastore_basic_query]
query = client.query(kind="Task")
query.add_filter(filter=datastore.query.PropertyFilter("done", "=", False))
query.add_filter(filter=datastore.query.PropertyFilter("priority", ">=", 4))
query.order = ["-priority"]
# [END datastore_basic_query]
return list(query.fetch())
def projection_query(client):
# Create the entity that we're going to query.
task = datastore.Entity(client.key("Task"))
task.update(
{
"category": "Personal",
"done": False,
"priority": 4,
"description": "Learn Cloud Datastore",
"percent_complete": 0.5,
}
)
client.put(task)
# [START datastore_projection_query]
query = client.query(kind="Task")
query.projection = ["priority", "percent_complete"]
# [END datastore_projection_query]
# This block intentionally doesn't include the top level import because
# it doesn't use a `datastore.Client` instance
# [START datastore_run_query_projection]
priorities = []
percent_completes = []
for task in query.fetch():
priorities.append(task["priority"])
percent_completes.append(task["percent_complete"])
# [END datastore_run_query_projection]
return priorities, percent_completes
def ancestor_query(client):
task = datastore.Entity(client.key("TaskList", "default", "Task"))
task.update(
{
"category": "Personal",
"description": "Learn Cloud Datastore",
}
)
client.put(task)
# [START datastore_ancestor_query]
# Query filters are omitted in this example as any ancestor queries with a
# non-key filter require a composite index.
ancestor = client.key("TaskList", "default")
query = client.query(kind="Task", ancestor=ancestor)
# [END datastore_ancestor_query]
return list(query.fetch())
def run_query(client):
# [START datastore_run_query]
query = client.query()
results = list(query.fetch())
# [END datastore_run_query]
return results
def limit(client):
# [START datastore_limit]
query = client.query()
tasks = list(query.fetch(limit=5))
# [END datastore_limit]
return tasks
def cursor_paging(client):
# [START datastore_cursor_paging]
def get_one_page_of_tasks(cursor=None):
query = client.query(kind="Task")
query_iter = query.fetch(start_cursor=cursor, limit=5)
page = next(query_iter.pages)
tasks = list(page)
next_cursor = query_iter.next_page_token
return tasks, next_cursor
# [END datastore_cursor_paging]
page_one, cursor_one = get_one_page_of_tasks()
page_two, cursor_two = get_one_page_of_tasks(cursor=cursor_one)
return page_one, cursor_one, page_two, cursor_two
def property_filter(client):
# Create the entity that we're going to query.
upsert(client)
# [START datastore_property_filter]
query = client.query(kind="Task")
query.add_filter(filter=datastore.query.PropertyFilter("done", "=", False))
# [END datastore_property_filter]
return list(query.fetch())
def composite_filter(client):
# Create the entity that we're going to query.
upsert(client)
# [START datastore_composite_filter]
query = client.query(kind="Task")
query.add_filter(filter=datastore.query.PropertyFilter("done", "=", False))
query.add_filter(filter=datastore.query.PropertyFilter("priority", "=", 4))
# [END datastore_composite_filter]
return list(query.fetch())
def key_filter(client):
# Create the entity that we're going to query.
upsert(client)
# [START datastore_key_filter]
query = client.query(kind="Task")
first_key = client.key("Task", "first_task")
# key_filter(key, op) translates to add_filter('__key__', op, key).
query.key_filter(first_key, ">")
# [END datastore_key_filter]
return list(query.fetch())
def ascending_sort(client):
# Create the entity that we're going to query.
import datetime
task = upsert(client)
task["created"] = datetime.datetime.now(tz=datetime.timezone.utc)
client.put(task)
# [START datastore_ascending_sort]
query = client.query(kind="Task")
query.order = ["created"]
# [END datastore_ascending_sort]
return list(query.fetch())
def descending_sort(client):
# Create the entity that we're going to query.
import datetime
task = upsert(client)
task["created"] = datetime.datetime.now(tz=datetime.timezone.utc)
client.put(task)
# [START datastore_descending_sort]
query = client.query(kind="Task")
query.order = ["-created"]
# [END datastore_descending_sort]
return list(query.fetch())
def multi_sort(client):
# Create the entity that we're going to query.
import datetime
task = upsert(client)
task["created"] = datetime.datetime.now(tz=datetime.timezone.utc)
client.put(task)
# [START datastore_multi_sort]
query = client.query(kind="Task")
query.order = ["-priority", "created"]
# [END datastore_multi_sort]
return list(query.fetch())
def keys_only_query(client):
# Create the entity that we're going to query.
upsert(client)
# [START datastore_keys_only_query]
query = client.query()
query.keys_only()
# [END datastore_keys_only_query]
keys = list([entity.key for entity in query.fetch(limit=10)])
return keys
def distinct_on_query(client):
# Create the entity that we're going to query.
upsert(client)
# [START datastore_distinct_on_query]
query = client.query(kind="Task")
query.distinct_on = ["category"]
query.order = ["category", "priority"]
# [END datastore_distinct_on_query]
return list(query.fetch())
def kindless_query(client):
# Create the entity that we're going to query.
upsert(client)
# [START datastore_kindless_query]
last_seen_key = client.key("Task", "a")
query = client.query()
query.key_filter(last_seen_key, ">")
# [END datastore_kindless_query]
return list(query.fetch())
def inequality_range(client):
# [START datastore_inequality_range]
import datetime
start_date = datetime.datetime(1990, 1, 1)
end_date = datetime.datetime(2000, 1, 1)
query = client.query(kind="Task")
query.add_filter(filter=datastore.query.PropertyFilter("created", ">", start_date))
query.add_filter(filter=datastore.query.PropertyFilter("created", "<", end_date))
# [END datastore_inequality_range]
return list(query.fetch())
def inequality_invalid(client):
import google.cloud.exceptions
try:
# [START datastore_inequality_invalid]
import datetime
start_date = datetime.datetime(1990, 1, 1)
query = client.query(kind="Task")
query.add_filter(
filter=datastore.query.PropertyFilter("created", ">", start_date)
)
query.add_filter(filter=datastore.query.PropertyFilter("priority", ">", 3))
# [END datastore_inequality_invalid]
return list(query.fetch())
except (google.cloud.exceptions.BadRequest, google.cloud.exceptions.GrpcRendezvous):
pass
def equal_and_inequality_range(client):
# [START datastore_equal_and_inequality_range]
import datetime
start_date = datetime.datetime(1990, 1, 1)
end_date = datetime.datetime(2000, 12, 31, 23, 59, 59)
query = client.query(kind="Task")
query.add_filter(filter=datastore.query.PropertyFilter("priority", "=", 4))
query.add_filter(filter=datastore.query.PropertyFilter("done", "=", False))
query.add_filter(filter=datastore.query.PropertyFilter("created", ">", start_date))
query.add_filter(filter=datastore.query.PropertyFilter("created", "<", end_date))
# [END datastore_equal_and_inequality_range]
return list(query.fetch())
def inequality_sort(client):
# [START datastore_inequality_sort]
query = client.query(kind="Task")
query.add_filter(filter=datastore.query.PropertyFilter("priority", ">", 3))
query.order = ["priority", "created"]
# [END datastore_inequality_sort]
return list(query.fetch())
def inequality_sort_invalid_not_same(client):
import google.cloud.exceptions
try:
# [START datastore_inequality_sort_invalid_not_same]
query = client.query(kind="Task")
query.add_filter(filter=datastore.query.PropertyFilter("priority", ">", 3))
query.order = ["created"]
# [END datastore_inequality_sort_invalid_not_same]
return list(query.fetch())
except (google.cloud.exceptions.BadRequest, google.cloud.exceptions.GrpcRendezvous):
pass
def inequality_sort_invalid_not_first(client):
import google.cloud.exceptions
try:
# [START datastore_inequality_sort_invalid_not_first]
query = client.query(kind="Task")
query.add_filter(filter=datastore.query.PropertyFilter("priority", ">", 3))
query.order = ["created", "priority"]
# [END datastore_inequality_sort_invalid_not_first]
return list(query.fetch())
except (google.cloud.exceptions.BadRequest, google.cloud.exceptions.GrpcRendezvous):
pass
def array_value_inequality_range(client):
# [START datastore_array_value_inequality_range]
query = client.query(kind="Task")
query.add_filter(filter=datastore.query.PropertyFilter("tag", ">", "learn"))
query.add_filter(filter=datastore.query.PropertyFilter("tag", "<", "math"))
# [END datastore_array_value_inequality_range]
return list(query.fetch())
def array_value_equality(client):
# [START datastore_array_value_equality]
query = client.query(kind="Task")
query.add_filter(filter=datastore.query.PropertyFilter("tag", "=", "fun"))
query.add_filter(filter=datastore.query.PropertyFilter("tag", "=", "programming"))
# [END datastore_array_value_equality]
return list(query.fetch())
def exploding_properties(client):
# [START datastore_exploding_properties]
import datetime
task = datastore.Entity(client.key("Task"))
task.update(
{
"tags": ["fun", "programming", "learn"],
"collaborators": ["alice", "bob", "charlie"],
"created": datetime.datetime.now(tz=datetime.timezone.utc),
}
)
# [END datastore_exploding_properties]
return task
def transactional_update(client):
# Create the entities we're going to manipulate
account1 = datastore.Entity(client.key("Account"))
account1["balance"] = 100
account2 = datastore.Entity(client.key("Account"))
account2["balance"] = 100
client.put_multi([account1, account2])
# [START datastore_transactional_update]
def transfer_funds(client, from_key, to_key, amount):
with client.transaction():
from_account = client.get(from_key)
to_account = client.get(to_key)
from_account["balance"] -= amount
to_account["balance"] += amount
client.put_multi([from_account, to_account])
# [END datastore_transactional_update]
# [START datastore_transactional_retry]
import google.cloud.exceptions
for _ in range(5):
try:
transfer_funds(client, account1.key, account2.key, 50)
break
except google.cloud.exceptions.Conflict:
continue
else:
print("Transaction failed.")
# [END datastore_transactional_retry]
return account1.key, account2.key
def transactional_get_or_create(client):
# [START datastore_transactional_get_or_create]
import datetime
with client.transaction():
key = client.key(
"Task", datetime.datetime.now(tz=datetime.timezone.utc).isoformat()
)
task = client.get(key)
if not task:
task = datastore.Entity(key)
task.update({"description": "Example task"})
client.put(task)
return task
# [END datastore_transactional_get_or_create]
def transactional_single_entity_group_read_only(client):
client.put_multi(
[
datastore.Entity(key=client.key("TaskList", "default")),
datastore.Entity(key=client.key("TaskList", "default", "Task", 1)),
]
)
# [START datastore_transactional_single_entity_group_read_only]
with client.transaction(read_only=True):
task_list_key = client.key("TaskList", "default")
task_list = client.get(task_list_key)
query = client.query(kind="Task", ancestor=task_list_key)
tasks_in_list = list(query.fetch())
return task_list, tasks_in_list
# [END datastore_transactional_single_entity_group_read_only]
def namespace_run_query(client):
# Create an entity in another namespace.
task = datastore.Entity(client.key("Task", "sample-task", namespace="google"))
client.put(task)
# [START datastore_namespace_run_query]
# All namespaces
query = client.query(kind="__namespace__")
query.keys_only()
all_namespaces = [entity.key.id_or_name for entity in query.fetch()]
# Filtered namespaces
start_namespace = client.key("__namespace__", "g")
end_namespace = client.key("__namespace__", "h")
query = client.query(kind="__namespace__")
query.key_filter(start_namespace, ">=")
query.key_filter(end_namespace, "<")
filtered_namespaces = [entity.key.id_or_name for entity in query.fetch()]
# [END datastore_namespace_run_query]
return all_namespaces, filtered_namespaces
def kind_run_query(client):
# Create the entity that we're going to query.
upsert(client)
# [START datastore_kind_run_query]
query = client.query(kind="__kind__")
query.keys_only()
kinds = [entity.key.id_or_name for entity in query.fetch()]
# [END datastore_kind_run_query]
return kinds
def property_run_query(client):
# Create the entity that we're going to query.
upsert(client)
# [START datastore_property_run_query]
from collections import defaultdict
query = client.query(kind="__property__")
query.keys_only()
properties_by_kind = defaultdict(list)
for entity in query.fetch():
kind = entity.key.parent.name
property_ = entity.key.name
properties_by_kind[kind].append(property_)
# [END datastore_property_run_query]
return properties_by_kind
def property_by_kind_run_query(client):
# Create the entity that we're going to query.
upsert(client)
# [START datastore_property_by_kind_run_query]
ancestor = client.key("__kind__", "Task")
query = client.query(kind="__property__", ancestor=ancestor)
representations_by_property = {}
for entity in query.fetch():
property_name = entity.key.name
property_types = entity["property_representation"]
representations_by_property[property_name] = property_types
# [END datastore_property_by_kind_run_query]
return representations_by_property
def regional_endpoint():
# [START datastore_regional_endpoints]
from google.cloud import datastore
from google.api_core.client_options import ClientOptions
ENDPOINT = "https://nam5-datastore.googleapis.com"
client_options = ClientOptions(api_endpoint=ENDPOINT)
client = datastore.Client(client_options=client_options)
query = client.query(kind="Task")
results = list(query.fetch())
for r in results:
print(r)
# [END datastore_regional_endpoints]
return client
def eventual_consistent_query(client):
# [START datastore_eventual_consistent_query]
query = client.query(kind="Task")
query.fetch(eventual=True)
# [END datastore_eventual_consistent_query]
def index_merge_queries(client):
# Create a Photo entity to query
photo = datastore.Entity(client.key("Photo", "sample_photo"))
photo.update(
{
"owner_id": "user1234",
"size": 2,
"coloration": 2,
"tag": ["family", "outside", "camping"],
}
)
client.put(photo)
# Sample queries using built-in indexes
queries = []
# [START datastore_built_in_index_queries]
query_owner_id = client.query(kind="Photo", filters=[("owner_id", "=", "user1234")])
query_size = client.query(kind="Photo", filters=[("size", "=", 2)])
query_coloration = client.query(kind="Photo", filters=[("coloration", "=", 2)])
# [END datastore_built_in_index_queries]
queries.append(query_owner_id)
queries.append(query_size)
queries.append(query_coloration)
# [START datastore_merged_index_query]
query_all_properties = client.query(
kind="Photo",
filters=[
("owner_id", "=", "user1234"),
("size", "=", 2),
("coloration", "=", 2),
("tag", "=", "family"),
],
)
# [END datastore_merged_index_query]
queries.append(query_all_properties)
# [START datastore_merged_index_tag_queries]
query_tag = client.query(
kind="Photo",
filters=[
("tag", "=", "family"),
("tag", "=", "outside"),
("tag", "=", "camping"),
],
)
query_owner_size_color_tags = client.query(
kind="Photo",
filters=[
("owner_id", "=", "user1234"),
("size", "=", 2),
("coloration", "=", 2),
("tag", "=", "family"),
("tag", "=", "outside"),
("tag", "=", "camping"),
],
)
# [END datastore_merged_index_tag_queries]
queries.append(query_tag)
queries.append(query_owner_size_color_tags)
# [START datastore_owner_size_tag_query]
query_owner_size_tag = client.query(
kind="Photo",
filters=[
("owner_id", "=", "username"),
("size", "=", 2),
("tag", "=", "family"),
],
)
# [END datastore_owner_size_tag_query]
queries.append(query_owner_size_tag)
# [START datastore_size_coloration_query]
query_size_coloration = client.query(
kind="Photo", filters=[("size", "=", 2), ("coloration", "=", 1)]
)
# [END datastore_size_coloration_query]
queries.append(query_size_coloration)
results = []
for query in queries:
results.append(query.fetch())
return results
def main(project_id):
from pprint import pprint
client = datastore.Client(project_id)
for name, function in globals().items():
if name in ("main", "_preamble", "defaultdict") or not callable(function):
continue
print(name)
pprint(function(client))
print("\n-----------------\n")
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(
description="Demonstrates datastore API operations."
)
parser.add_argument("project_id", help="Your cloud project ID.")
args = parser.parse_args()
main(args.project_id)