我是Google Datastore的新手,并且关注此Google文档。
https://cloud.google.com/datastore/docs/datastore-api-tutorial
我已经通过阅读此文档来完成了调用Google API的授权。
https://developers.google.com/identity/protocols/application-default-credentials#callingpython
我只有两个文件:
1. client_secret.json
2. datastoreConnection.py
这是我的datastoreConnection.py直到现在:
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '/path/to/client_secret.json'
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
from google.cloud import datastore
client = datastore.Client(project ="xyz",namespace = "staging")
def list_tasks(client):
query = client.query(kind='testData')
query.projection = ['patientName']
return list(query.fetch(limit=10))
print(list_tasks(client))
此代码工作正常,并返回所需的数据。
当我使用多个属性应用Projection时会出现问题。 e.g
query.projection = ['patientName','age']
代码给了我错误:
google.cloud.exceptions.PreconditionFailed: 412 no matching index found. recommended index is:<br/>- kind: testData<br/> properties:<br/> - name: age<br/> - name: patientName<br/>
为了进行投影查询,我读了这个。 https://cloud.google.com/datastore/docs/concepts/queries#datastore-projection-query-python
我已经交叉检查了属性名称,但仍然有相同的错误。 我该如何解决这个问题?
我在其他与此类问题相关的问题中看到了index.yaml文件。这有必要使用吗?它有什么好处?
答案 0 :(得分:1)
每当您需要检索多个属性而不是所有属性(*)时,您需要具有匹配的复合索引。在这种情况下,您需要患者姓名和年龄属性的综合索引。您可以使用index.yaml文件或gcloud命令行工具创建复合索引。以下文档可以帮助您: