Python 如何从Google云数据存储中检索实体

Python 如何从Google云数据存储中检索实体,python,google-app-engine,google-cloud-datastore,nosql,Python,Google App Engine,Google Cloud Datastore,Nosql,我在Google App Engine中的云数据存储有一些问题 我在数据库中有两个模型: class Product(ndb.Model): name = StringProperty(required=True) category = KeyProperty(kind=Category) description = TextProperty(required=True) price = IntegerProperty(required=True) 及 那么,如

我在Google App Engine中的云数据存储有一些问题

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

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

那么,如何从属于某个类别的产品类中获取所有数据呢

在关系SQL中,我使用了:

SELECT * FROM Product WHERE category = 'CertainName';

谢谢大家!

以下操作应执行sql查询的操作:

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

我刚刚意识到你需要按键过滤(谢谢@mgilson)。查询有点变化。基本上,您只需要首先获取您的category_实体,然后像这样应用过滤器:

query = Product.query(Product.category == category_entity.key)
其中,例如,您可以获取一个category_实体,如下所示:

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

有关更多信息,请参阅(查看通过密钥查询客户的购买信息)

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

1) 生成新类别实体时

2) 当您需要根据特定类别查询产品时

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

category\u key=category.create\u key(name='CertainName')


query=Product.query(Product.category==category\u key)

事实并非如此。。。在关系SQL中,在进行选择之前,需要将产品表与类别表连接起来。不幸的是,数据存储不支持查询中的连接。您需要获取所有内容并加入代码,或者获取所有类别,然后通过类别键查询产品(可能效率很低),或者提出不同的数据模型……但是
Product.category
是一个键字段,而不是字符串字段,因此此查询无法工作。不幸的是,OP正试图跨“表”进行连接,据我所知,在大多数NoSQL环境中,这些表从来都不能很好地工作(尽管我无论如何都不是专家…@mgilson可以按键进行过滤。有一些例子是正确的——我也不怀疑这是否可能——但在我看来OP想要的是:
Product.query(Product.category.IN(category.query(category.name='CategoryName').fetch(keys\u only=True))
。如果类别查询返回的结果足够少,这可能会起作用,但它最多只能是低效的。。。我的观点是OP试图通过
类别
表中的某个内容来查询
产品
表,NoSQL数据库或至少google数据存储不支持该内容。嗯,据我所知(查看查询),这看起来像是表中某个属性的过滤器。因此,在这种情况下,没有必要加入。好吧,不管怎样,我会让OP得到他想要的。非常感谢你的帮助。但我对数据存储非常陌生,“category_entity.key”是什么意思?我该怎么做呢?谢谢你的帮助。但是我无法使用create\u key()函数。AttributeError:type对象“Owner”没有属性“create\u key”这是一个错误,您需要在类别类定义中自己实现create\u key(),并返回ndb.key(Category,name)之类的内容。您可以在文档中获得更多信息()
category_entity = Category.query(Category.name == "SomeCat").fetch()