2015-05-01 47 views
1

我使用的是带有webapp2和Python的Google App Engine。get_by_id中的查询语句(ndb,GAE)

我有一个User模型与deleted场:

class User(ndb.Model): 
    first_name = ndb.StringProperty() 
    last_name = ndb.StringProperty() 
    email = ndb.StringProperty() 
    deleted = ndb.BooleanProperty(default=False) 

我想通过调用User.get_by_id()得到一个用户对象,但我想排除有deletedTrue对象。是否有可能使用正常的get_by_id()函数执行此操作?

如果不是,我可以覆盖它吗?

或者我应该创建一个自定义类的方法,不像get_by_id_2()那样正常.get()查询是这样的:User.query(User.key.id()==id, User.deleted==False).get()

你会推荐别的东西吗?

回答

3

查询明显比get得慢,并且最终一致。你应该使用普通的get_by_id,然后检查删除。你当然可以用一种方法把它包起来:

@classmethod 
def get_non_deleted(cls, id): 
    entity = cls.get_by_id(id) 
    if entity and not entity.deleted: 
     return entity 
+0

好主意 - 谢谢! – ramuta