Python 如何检查GAE NDB中是否存在记录?

Python 如何检查GAE NDB中是否存在记录?,python,google-app-engine,app-engine-ndb,Python,Google App Engine,App Engine Ndb,我有两门课: class User(ndb.Model): # key is user's email phone = ndb.IntegerProperty(indexed=False) ... class Question(ndb.Model): user = ndb.KeyProperty(kind=User) ... 并使用以下代码将用户的问题添加到数据存储: q = Question() ... user = User.get_by_id(email

我有两门课:

class User(ndb.Model): # key is user's email
    phone = ndb.IntegerProperty(indexed=False)
    ...

class Question(ndb.Model):
    user = ndb.KeyProperty(kind=User)
    ...
并使用以下代码将用户的问题添加到数据存储:

q = Question()
...
user = User.get_by_id(email)
if user:
    q.user = ndb.Key(User, email)
(未知用户可以添加问题)


我做得对吗?我是否应该以某种方式优化代码(仅使用
?)以减少读/写NDB操作的数量?

用户是否已经登录?如果是,那么您可以将userkey存储在会话中,并省略get_by_id


除此之外,GETYBYBYID非常有效,但是如果用户实体很大,则应该考虑拆分它(因为取走一个较小的实体更便宜)。get_by_id的另一个很酷的地方是,它将首先使用memcache,如果实体不在memcache中,则使用数据存储。如果用户问了很多问题,实体可能会在memcache中。

我想你是对的。因为你基于用户的电子邮件作为密钥,所以你也只能使用密钥。除此之外,我在这里看不到任何优化。@JimmyKane,当我使用'get_by_id'时,它不会返回(=读取)整个实体吗?是的。所以只把钥匙放在那边。@JimmyKane,我该怎么做
user=user.get\u by\u id(电子邮件,keys\u only=True)
无效。正如我所看到的(我花了一些时间使用该键),除了做你所做的之外,你无法进一步优化它。keys_只对查询有效,所以我认为这是不可能的。