我试图实施一个代码,如果它有任何相关实体,就不会删除该实体。
class Father(ndb.Model):
name = ndb.StringProperty(indexed=True)
class Son(ndb.Model):
name = ndb.StringProperty(indexed=True)
father = ndb.KeyProperty(Father)
这是我的代码:
father = Father.get_by_id(long(keynumber))
if father:
father_key = father.key
if father_key:
sons = Son.query(Son.father==father_key).fetch()
number_of_sons = len(sons)
if number_of_sons == 0:
father_key.delete()
当这个运行时,儿子总是一个空列表[]虽然父亲有相关的儿子。
为什么这个查询不起作用?
答案 0 :(得分:0)
正如@Patrick Costello建议的那样,使用strongly-consistent查询是处理此问题的正确方法:
class Father(ndb.Model):
name = ndb.StringProperty(indexed=True)
class Son(ndb.Model):
name = ndb.StringProperty(indexed=True)
@classmethod
def create(cls, name, father):
son = cls(name=name, parent=father)
son.put()
我建议使用count()
操作:
father = Father.get_by_id(long(keynumber))
if father:
father_key = father.key
if father_key:
sons_exist = Son.query(ancestor=father_key).count(1)
if sons_exist == 0:
father_key.delete()
仅计算最多1,count(1)
的结果为真/假(1/0)值。
不完全相同,但this question类似。
答案 1 :(得分:0)
感谢您的帮助和帖子。
我通过使用这种技术(又称解决方法)来实现它:
father = Father.get_by_id(long(keynumber))
if father:
father_key = father.key
if father_key:
sons = Son.query(Son.father==ndb.Key('Father', str(keynumber))).fetch()
number_of_sons = len(sons)
if number_of_sons == 0:
father_key.delete()
我仍然不明白为什么,但这对我有用。