标签: gql

Google App Engine:是否可以执行Gql LIKE查询?

真的很简单.在SQL中,如果我想在文本字段中搜索几个字符,我可以这样做:

SELECT blah FROM blah WHERE blah LIKE '%text%'
Run Code Online (Sandbox Code Playgroud)

App Engine的文档没有提到如何实现这一点,但肯定这是一个常见的问题吗?

google-app-engine gql google-cloud-datastore

121
推荐指数
4
解决办法
4万
查看次数

如何使用实体密钥在GQL中查询

如何在Google App Engine数据查看器中使用GQL针对实体密钥编写查询?

在查看器中,第一列(Id/Name)显示为name=_1,在详细视图中,它将键显示为

Decoded entity key: Programme: name=_1
Entity key: agtzcG9................... 
Run Code Online (Sandbox Code Playgroud)

此查询不起作用:

SELECT * FROM Programme where name = '_1'
Run Code Online (Sandbox Code Playgroud)

google-app-engine gql google-cloud-datastore

72
推荐指数
3
解决办法
3万
查看次数

数据存储区查看器中具有数字ID的GQL查询

我想构建GQL查询以使用其数字ID获取对象.我在App管理控制台的Datastore查看器中这样做,所以我不能使用Model.get_by_id(numeric_id).就像是

SELECT * FROM Model WHERE id = <numeric_id>
Run Code Online (Sandbox Code Playgroud)

也行不通.

google-app-engine gql

35
推荐指数
2
解决办法
1万
查看次数

在GQL中计算结果的最佳方法是什么?

我认为计算的一种方法是这样的:

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 gql gqlquery

29
推荐指数
3
解决办法
2万
查看次数

App Engine数据存储查看器,如何使用GQL显示记录数?

认为对于类似SQL的人来说这很容易!我想要的是GQL相当于:

select count(*) from foo;
Run Code Online (Sandbox Code Playgroud)

并回答类似的答案:

1972 records.
Run Code Online (Sandbox Code Playgroud)

我想从基于Web的DataStore查看器中的"命令行"在GQL中执行此操作.(你知道,一次显示20个,让我看到"下一个20")

无论如何 - 我确信这很容易让人脑筋流满为止,我似乎无法找到正确的语法.任何帮助,将不胜感激.

谢谢!

google-app-engine gql

23
推荐指数
3
解决办法
2万
查看次数

如何在GQL中查询过去6小时(日期时间)内的所有条目?

我在Google App Engine中有一个带有日期字段的简单表格.我想查询所有行,其中包含从现在到6小时之前的日期字段.我该如何形成这个查询?

google-app-engine gql gqlquery

14
推荐指数
2
解决办法
7202
查看次数

对StringProperty的gql查询中的where insensitive where子句

使用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)

google-app-engine gql gqlquery

12
推荐指数
2
解决办法
3948
查看次数

如何在Google App Engine中实现互联网高分

我想为我的游戏实现互联网高分.并向他们所拥有的玩家提供反馈(不仅仅是top100或类似的东西).在普通的SQL中,它看起来像这样:

SELECT COUNT(*)FROM得分WHERE points>:newUsersPoints

和GQL有类似的东西

db.GqlQuery("SELECT*FROM Score WHERE points>:1",newUsersPoints).count()

但由于count()仅限于1000,因此在我的情况下它不会非常有用.您对如何实现这一点有任何想法吗?

我有两个

第一:

  1. 使用分片计数器的想法(http://code.google.com/intl/pl/appengine/articles/sharding_counters.html)创建新的"表格",用于存储某些范围内的分数(from_points,to_points)

  2. 汇总上表中range.to_points <newUsersPoints的所有计数器

  3. 在新分数为db.GqlQuery("SELECT*FROM Score WHERE points>:1 AND points> =:2 AND points <:3",newUsersPoints,range.from_points,range)的范围内查找分数大于分数的分数. to_points).count()+ sumfrom2

  4. 查找新分数所在的范围并增加其计数器

  5. 计数器的分割范围大于1000(或999),因此3.不会达到限制

  6. 在分数表中添加新分数

这是非常复杂和容易出错的.在添加分数之前,我们可能会增加一些范围和超时.(不是交易)

第二个想法:

有时候(每天一次?)按分数对所有分数进行排序并给它们新的位置(脚本可能超时,所以我们必须以块的形式进行)

要找出我们刚刚在哪个地方获得新分数

db.GqlQuery("SELECT*FROM Score WHERE points>:1 LIMIT 1",newUsersPoints).get().precalculated_position + 1

还有其他想法吗?

google-app-engine gql gqlquery

10
推荐指数
2
解决办法
1702
查看次数

查询Appengine数据存储区中的N个随机记录

我正在尝试编写一个返回特定类型的N个随机记录的GQL查询.我当前的实现工作但需要N次调用数据存储区.如果可能的话,我想对数据存储区进行1次调用.

我目前为我放入数据存储区的每种类型分配一个随机数.当我查询随机记录时,我生成另一个随机数并查询记录> rand ORDER BY asc LIMIT 1.

这是有效的,但它只返回1条记录,所以我需要进行N次查询.关于如何进行这一查询的任何想法?谢谢.

random google-app-engine gql google-cloud-datastore

9
推荐指数
2
解决办法
4995
查看次数

谷歌应用引擎和分页

如何编写一个查询,从数据存储中的10000个对象的集合中选择项目2000-2010.

我知道在GQL中可以这样做:

select * from MyObject limit 10 offset 2000
Run Code Online (Sandbox Code Playgroud)

根据文档,当使用offset引擎时仍将获取所有行,只返回它们,从而使查询以与值的线性对应的方式执行offset.

有没有更好的方法?例如使用伪ROWNUM列可以在其他类型的数据存储中执行.

google-app-engine gql

8
推荐指数
1
解决办法
1485
查看次数