如何从Google Cloud Datastore中检索实体

时间:2016-08-31 07:34:07

标签: python google-app-engine google-cloud-datastore nosql

我在Google App Engine中遇到云数据存储问题。

我在数据库中有2个模型:

class Product(ndb.Model):
    name = StringProperty(required=True)
    category = KeyProperty(kind=Category)
    description = TextProperty(required=True)
    price = IntegerProperty(required=True)

class Category(ndb.Model):
    name=StringProperty(required=True)

那么如何才能从Product Class中获取属于某个类别的所有数据?

在我使用的关系SQL中:

SELECT * FROM Product WHERE category = 'CertainName';

谢谢!

2 个答案:

答案 0 :(得分:1)

以下内容应该执行sql查询正在执行的操作:

query = Product.query(Product.category == "CertainName") # Note the "=="

编辑:

我刚刚意识到你需要按键过滤(谢谢@mgilson)。查询稍有变化。基本上你只需要先得到你的category_entity,然后像这样应用过滤器:

query = Product.query(Product.category == category_entity.key)

例如,您可以获取如下所示的category_entity:

category_entity = Category.query(Category.name == "SomeCat").fetch()

有关详细信息,请参阅https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/appengine/standard/ndb/queries/snippets.py(查看query_purchases_for_customer_via_key)

答案 1 :(得分:0)

您可以根据“名称”字段在类别类别中生成自己的密钥并使用它:

1)生成新的类别实体时

2)当您需要针对特定​​类别查询产品时。

因此,在分类实体拥有您可以随时生成的密钥之后,您可以说:

category_key = Category.create_key(name ='CertainName')

query = Product.query(Product.category == category_key)