如何从Google App Engine Datastore中获取单个记录?

2 投票
1 回答
2394 浏览
提问于 2025-04-16 06:33

我在使用Google App Engine、GQL和Python的时候,数据存储里有一些东西,像这样:

class Thing(db.Model):
   domain = db.StringProperty(required=True)
   name = db.StringProperty()
   ...more...

在我的处理程序里,我有:

currentThing = db.GqlQuery("SELECT * FROM Thing WHERE domain=:1 LIMIT 1",
                                       "example.com")

我知道这最多只会返回一个“Thing”,但是我找不到办法把这个“Thing”直接放到一个“Thing”对象里,而不需要通过循环,这让我觉得有点奇怪。

我也试过用 Thing.gql("WHERE domain=:1 LIMIT 1", "example.com") 这种写法,但没有成功。它们似乎都返回的是一堆集合。

我之前是做.NET的,现在刚接触Python和App Engine,所以我在找类似于 .FirstOrDefault() 这样的功能。

1 个回答

7

只需要在你的查询后面加上一个 .get() 就可以了。根据文档的说明:

这个操作会执行查询,然后返回第一个结果,如果没有结果就返回 None。

使用 get() 意味着你只想要一个结果,这会覆盖掉 GQL 查询中的 LIMIT 限制(如果有的话)。最多只会从数据存储中获取一个结果。

另外还有 .fetch(limit, offset=0),这个可以让你从查询中获取 limit 个结果。

撰写回答