gae ndb 查询未能找到具有键 属性 的相关记录
gae ndb query failing to find related records with key property
我正在尝试实现一个代码,如果某个实体有任何相关实体,则不会删除该实体。
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()
运行时,儿子总是一个空列表[],尽管父亲有相关儿子。
为什么这个查询不起作用?
正如@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)
的结果是 true/false (1/0) 值。
不完全相同,但 this question 相似。
感谢您的帮助和发帖。
我通过使用这种技术(也称为变通方法)让它工作:
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()
我还是不明白为什么,但这对我有用。
我正在尝试实现一个代码,如果某个实体有任何相关实体,则不会删除该实体。
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()
运行时,儿子总是一个空列表[],尽管父亲有相关儿子。
为什么这个查询不起作用?
正如@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)
的结果是 true/false (1/0) 值。
不完全相同,但 this question 相似。
感谢您的帮助和发帖。
我通过使用这种技术(也称为变通方法)让它工作:
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()
我还是不明白为什么,但这对我有用。