appengine:如何检查实体的属性是否存在于数据存储中?

2 投票
4 回答
2574 浏览
提问于 2025-04-16 20:57

我知道在数据存储中查询缺失值是不可能的(可以参考这个问题)。

那么在Python代码中呢?有没有办法检查一个实体的属性值是来自数据存储,还是来自默认值?

使用场景:

模型Kind_X有1000个实体。对于属性Kind_X.my_property

  • 500个实体没有my_property
  • 400个实体的my_property是None
  • 100个实体有其他值

我想把my_property设置为ABC,只针对那500个没有这个属性的实体。那400个有值None的实体不能被修改。

注意:把my_property的默认值设置为ABC不是一个可接受的解决方案。

4 个回答

0

使用高级的 ext.db 框架是无法做到这一点的。你可以使用更底层的 google.appengine.api.datastore 框架来获取数据(具体的说明可以在文档字符串里找到)。

为什么你需要区分这两种情况呢?可能有更好的解决办法。

0

你可以通过编程的方式,遍历所有特定类型的实体,并进行检查,方法是:

entities = Model.all()
for entity in entities :
  if not entity.newproperty :
    print "Hey, this entity is missing something"

如果实体的数量很多,你应该使用mapreduce库,这样可以避免超时的问题。

0

在编程中,有时候我们需要把一些代码放在一起,这样可以让代码更整洁,也更容易管理。比如说,如果你有一段代码需要重复使用,或者你想把一些功能分开处理,这时候就可以用到“函数”。函数就像一个小工具箱,你可以把常用的工具放进去,随时拿出来用。

当你定义了一个函数后,你可以在程序的其他地方调用它,这样就不需要每次都写一模一样的代码了。这样不仅节省了时间,还能减少出错的机会。

另外,函数还可以接收一些输入,这些输入叫做“参数”。你可以把不同的参数传给函数,让它根据这些参数来做不同的事情。这样一来,同一个函数就能处理不同的情况,非常灵活。

总之,函数是编程中非常重要的一个概念,它能帮助我们写出更简洁、更高效的代码。

from google.appengine.api import datastore

entity_key = 'ag1lbmdlbG1pbmFzd2VicgoLEgRVc2VyGGIM' 
entity = datastore.Get(entity_key)
print 'my_property' in entity

撰写回答