首页 > 解决方案 > gcp - 从数据存储中获取所有实体

问题描述

我正在尝试从数据存储中获取所有数据实体。当我遇到 google docs 时,我发现了类似于Query Projection ( Link to the Docs ) 的东西。这是我用来从数据存储中获取所有实体的代码。

def do_the_query_projection(self, kind_name):

        query = self.client.query(kind=kind_name)
        query.projection = ['attr_1', 'attr_2', 'attr_3']

        #create a list to store
        f, m, r = [], [], []

        for task in query.fetch():
            f.append(task['attr_1'])
            m.append(task['attr_2'])
            r.append(task['attr_3'])

        return f, m, r

这是我现在面临的错误

> google.api_core.exceptions.FailedPrecondition: 400 no matching index
> found. recommended index is:
> - kind: <kind_name>  properties:
>   - name: attr_1
>   - name: attr_2
>   - name: attr_3

是否有任何其他方法可以从 Cloud Datastore 检索所有数据实体?我们是否需要创建复合索引来检索数据?我是 GCP 的新手。

标签: python-3.xgoogle-cloud-platformgoogle-cloud-datastore

解决方案


尝试在没有投影的情况下进行查询。

当您已经在要检索的列上具有复合索引时,投影查询很有用,因为它允许您从索引中检索这些列,而无需从数据表中检索任何内容。但是,如果您没有索引,则数据存储区必须以任何一种方式检索完整数据,因此在这种情况下它不允许您指定投影。


推荐阅读