查询中是否有实体的子项?
鉴于:
class Factory(db.Model):
""" Parent-kind """
name = db.StringProperty()
class Product(db.Model):
""" Child kind, use Product(parent=factory) to make """
@property
def factory(self):
return self.parent()
serial = db.IntegerProperty()
Run Code Online (Sandbox Code Playgroud)
假设有500家工厂生产了500种产品,总计250,000种产品.有没有办法形成一个资源有效的查询,只返回一个特定工厂生产的500个产品?祖先方法是一个过滤器,因此使用例如Product.all().ancestor(factory_1)将需要重复调用数据存储区.
我正在寻找在SQL版本中广泛使用的简单聚合函数.
简单的事情Select Count(*) from table1比较复杂.
如果这些可用,是否有一些文件可以指向我?
谢谢 - 吉吉
我想知道,我如何从数据存储区(python)获得评级实体的总和?
我是不是该:
ratingsum = 0
for rating in ratings:
ratingsum + rating
print ratingsum
Run Code Online (Sandbox Code Playgroud)
?
是否有任何聪明的方法可以避免在以下情况下使用IN子句进行代价高昂的查询?
我正在使用Google App Engine构建Facebook应用程序,并且在某些时候我(显然)需要查询数据存储区以获取属于给定用户的任何facebook朋友的所有实体.
假设我有几个实体建模:
class Thing(db.Model):
owner = db.ReferenceProperty(reference_class=User, required=True)
owner_id = db.StringProperty(required=True)
...
Run Code Online (Sandbox Code Playgroud)
和
class User(db.Model):
id = db.StringProperty(required=True)
...
Run Code Online (Sandbox Code Playgroud)
在某些时候,我查询Facebook以获取给定用户的朋友列表,我需要执行以下查询
# get all Thing instances that belong to friends
query = Thing.all()
query.filter('owner_id IN', friend_ids)
Run Code Online (Sandbox Code Playgroud)
如果我这样做,AppEngine将为每个id执行子查询friend_ids,可能超过任何查询可以生成的子查询的最大数量(30).
有没有更好的方法来做到这一点(即最小化查询数量)?我知道使用数据存储区没有任何关系和连接,但是,特别是,如果它有助于使事情变得更容易,我会考虑向User或Thing类添加新字段.
我怎么在世界上用python将字符串变量传递给GQL?我可以在SQL中做得很好,但它只是不起作用.这就是我所拥有的:
personalposts = db.GqlQuery("select * from PersonalPost where user_id = %s order by created desc limit 30" % user_id)
Run Code Online (Sandbox Code Playgroud)
这一直在杀我,但我觉得应该很简单.
谢谢!
我有一个GAE数据存储表,其中包含一个数组字段(包含几个字符串).我想基于包含特定字符串的所有数组字段来过滤此表.我怎样才能做到这一点 ?我没有在GQL中看到'包含'运算符,而'in'运算符则以相反的方式运行.我只需要遍历所有实体并自己进行检查吗?
(PS我在GAE工作中使用Python).
我正在研究Google Cloud Datastore GQL 语法- 特别是HAS ANCESTOR和HAS DESCENDANT比较运算符。
给出以下Person实体:
下面的 GQL 查询会产生相同的输出吗?
SELECT * FROM Person WHERE key_name='Fred' HAS ANCESTOR KEY('Person', 'Amy')
SELECT * FROM Person WHERE KEY('Person', 'Amy') HAS DESCENDANT key_name='Fred'
Run Code Online (Sandbox Code Playgroud)
如果是这样,我不明白 HAS DESCENDANT 子句的存在。
提前致谢!
我的系统中有一个用户创建了一个我想要检索的实体.我试图使用过滤器这样做,因为它应该比调用gql方法更快.但是,过滤器不返回任何结果,并且gql有效.
randy_res = Vote.all().filter('created_by=', randy).fetch(limit=10)
randy_res = Vote.gql('WHERE created_by=:1', randy)
Run Code Online (Sandbox Code Playgroud)
是否有任何理由为什么过滤器将返回一个空列表,并且gql调用将返回正确的结果?
我有一个名为 Account 的实体类型。其中一个字段是名为 的字符串selfie,它基本上是用户上传的自拍照的 URL。我想为有自拍的用户获取(因此,如果用户没有自拍,则不应将其包含在结果集中)。我有以下查询。但它不起作用,因为我有"NULL"一个字符串。这样做的正确方法是什么?同样,我只想要有自拍的用户。
Filter selfie = new FilterPredicate("selfie", FilterOperator.GREATER_THAN, "NULL");
Query query = new Query(Account.class.getSimpleName()).setFilter(selfie);
FetchOptions options = FetchOptions.Builder.withLimit(30);
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
QueryResultList<Entity> entities = datastore.prepare(query).asQueryResultList(options);
Run Code Online (Sandbox Code Playgroud)
此外,我对在 App-Engine 上执行此操作的 JDO/JPA 方式持开放态度(但它必须适用于 App-Engine)。
我在 Google Cloud Datastore 中有一个实体。属性之一是字符串数组。例如:
属性:技能
实体 1:
值:["mysql","sqlserver","postgresql","sqllite","sql-server-2008","sql"]
实体 2:
值:["css","css3"]
现在,我需要查询那些包含数组元素的实体css*
在典型的 SQL 中,它将是select * from kindName where skills like 'css%'
我尝试过select * from kindName where skills = 'css',效果很好,但是如何获取具有css*与 SQL 查询类似的元素的实体?
或者
为此建立数据模型的最佳方法是什么?
google-app-engine gql google-cloud-datastore google-cloud-platform