我认为计算的一种方法是这样的:
foo = db.GqlQuery("SELECT * FROM bar WHERE baz = 'baz')
my_count = foo.count()
Run Code Online (Sandbox Code Playgroud)
我不喜欢的是我的数量将限制在1000以上,我的查询可能会很慢.那里的人有解决方法吗?我有一个想法,但它感觉不干净.如果只有GQL有一个真正的COUNT函数......
我在Google App Engine中有一个带有日期字段的简单表格.我想查询所有行,其中包含从现在到6小时之前的日期字段.我该如何形成这个查询?
使用google appengine数据存储区,有没有办法执行gql查询,在不区分大小写的StringProperty数据类型上指定WHERE子句?我并不总是确定该值的大小写.文档指定where对我的值区分大小写,有没有办法使这个不敏感?
例如db模型将是这样的:
from google.appengine.ext import db
class Product(db.Model):
id = db.IntegerProperty()
category = db.StringProperty()
Run Code Online (Sandbox Code Playgroud)
数据看起来像这样:
id category
===================
1 cat1
2 cat2
3 Cat1
4 CAT1
5 CAT3
6 Cat4
7 CaT1
8 CAT5
Run Code Online (Sandbox Code Playgroud)
我想说
gqlstring = "WHERE category = '{0}'".format('cat1')
returnvalue = Product.gql(gqlstring)
Run Code Online (Sandbox Code Playgroud)
并returnvalue
包含
id category
===================
1 cat1
3 Cat1
4 CAT1
7 CaT1
Run Code Online (Sandbox Code Playgroud) 我想为我的游戏实现互联网高分.并向他们所拥有的玩家提供反馈(不仅仅是top100或类似的东西).在普通的SQL中,它看起来像这样:
SELECT COUNT(*)FROM得分WHERE points>:newUsersPoints
和GQL有类似的东西
db.GqlQuery("SELECT*FROM Score WHERE points>:1",newUsersPoints).count()
但由于count()仅限于1000,因此在我的情况下它不会非常有用.您对如何实现这一点有任何想法吗?
我有两个
第一:
使用分片计数器的想法(http://code.google.com/intl/pl/appengine/articles/sharding_counters.html)创建新的"表格",用于存储某些范围内的分数(from_points,to_points)
汇总上表中range.to_points <newUsersPoints的所有计数器
在新分数为db.GqlQuery("SELECT*FROM Score WHERE points>:1 AND points> =:2 AND points <:3",newUsersPoints,range.from_points,range)的范围内查找分数大于分数的分数. to_points).count()+ sumfrom2
查找新分数所在的范围并增加其计数器
计数器的分割范围大于1000(或999),因此3.不会达到限制
在分数表中添加新分数
这是非常复杂和容易出错的.在添加分数之前,我们可能会增加一些范围和超时.(不是交易)
第二个想法:
有时候(每天一次?)按分数对所有分数进行排序并给它们新的位置(脚本可能超时,所以我们必须以块的形式进行)
要找出我们刚刚在哪个地方获得新分数
db.GqlQuery("SELECT*FROM Score WHERE points>:1 LIMIT 1",newUsersPoints).get().precalculated_position + 1
还有其他想法吗?
查询中是否有实体的子项?
鉴于:
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)将需要重复调用数据存储区.
我有一个GAE数据存储表,其中包含一个数组字段(包含几个字符串).我想基于包含特定字符串的所有数组字段来过滤此表.我怎样才能做到这一点 ?我没有在GQL中看到'包含'运算符,而'in'运算符则以相反的方式运行.我只需要遍历所有实体并自己进行检查吗?
(PS我在GAE工作中使用Python).
我正在寻找在SQL版本中广泛使用的简单聚合函数.
简单的事情Select Count(*) from table1
比较复杂.
如果这些可用,是否有一些文件可以指向我?
谢谢 - 吉吉
我的系统中有一个用户创建了一个我想要检索的实体.我试图使用过滤器这样做,因为它应该比调用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调用将返回正确的结果?
是否可以从谷歌应用引擎数据库中选择db.Model
对象的键不在给定列表中?如果是这样,语法是什么?
模型类的例外:
class Spam(db.Model):
field1 = db.BooleanProperty(default=false)
field2 = db.IntegerProperty()
Run Code Online (Sandbox Code Playgroud)
我想要工作但无法弄清楚的查询示例:
spam_results = db.GqlQuery(
"SELECT * FROM Spam WHERE key NOT IN :1 LIMIT 10",
['ag1waWNreXByZXNlbnRzchMLEgxBbm5vdW5jZW1lbnQYjAEM',
'ag1waWNreXByZXNlbnRzchMLEgxBbm5vdW5jZW1lbnQYjgEM'])
for eggs in spam_results:
print "id: %s" % a.key().id()
Run Code Online (Sandbox Code Playgroud) 我怎么知道我的查询结果是使用Query接口还是GqlQuery接口返回零结果?使用.get()
零结果会产生错误吗?如果是的话,处理它的最佳方法是什么?
我可以在 GQL Playground 中执行这个精确的查询并返回数据。在调试期间,我可以在将查询字符串传递给 gql 之前立即捕获它。
我将无法共享架构
查询是
query {
vessels{
vessel {
mmsi
imo
name
shipType
}
}
}
Run Code Online (Sandbox Code Playgroud)
错误
Invalid AST Node: '\n query {\n vessels{\n vessel {\n mmsi\n imo\n name\n shipType\n }\n }\n }\n\n '
Run Code Online (Sandbox Code Playgroud)
我已经尝试了各种调试来找出如何解决这个问题,但没有成功
如果我想运行一个带有变量的GqlQuery我已经设置了可能吗?
例如:
myNumber = 4
myResult = db.GqlQuery("SELECT * from myData WHERE filter = myNumber")
Run Code Online (Sandbox Code Playgroud)
这导致:
解析错误:符号处的无效WHERE条件
我这样做错了吗?谢谢你的时间.
我有一个名为Datastore Kind Order
,它有一个祖先/父级User
.
我想使用GQL查询订单的所有不同祖先(用户),但以下查询不起作用.
SELECT DISTINCT User FROM Order
查询的响应是:
没有实体匹配此查询.
确保您要搜索的属性有简单索引或复合索引.学到更多
由于父母也是关键的一部分,我也尝试过:
SELECT DISTINCT __key__ FROM Order
但错误回复说:
GQL查询错误:属性:key不支持分组依据
gql gqlquery google-cloud-datastore google-cloud-platform google-query-language