我知道无法向数据存储区查询缺失值(请参阅此question)。
从python代码怎么样?是否可以检查实体属性的值是来自数据存储区还是来自默认值?
用例:
Model Kind_X 有1000个实体。对于属性 Kind_X.my_property 。
我想将 my_property 设置为 ABC 仅适用于那些没有该属性的500个实体。无法修改具有值None的400个实体。
注意:将 my_property 默认设置为 ABC 是不可接受的解决方案。
答案 0 :(得分:0)
您可以迭代给定类型的所有实体,并使用以下命令以编程方式检查:
entities = Model.all()
for entity in entities :
if not entity.newproperty :
print "Hey, this entity is missing something"
如果实体数量很大,则应使用mapreduce库以避免超时。
答案 1 :(得分:0)
使用高级ext.db
框架无法做到这一点。您可以使用较低级google.appengine.api.datastore
框架检索数据(文档位于文档字符串中)。
为什么你需要区分这两种情况?可能有更好的方法。
答案 2 :(得分:0)
如果您没有大量数据,则可以执行地图缩小并将所需实体的键存储在仅具有包含键的ListProperty的新模型中。 这是一种肮脏的黑客攻击,仅适用于少于5k的实体。它还会创建大量元数据,所以要小心
答案 3 :(得分:0)
from google.appengine.api import datastore
entity_key = 'ag1lbmdlbG1pbmFzd2VicgoLEgRVc2VyGGIM'
entity = datastore.Get(entity_key)
print 'my_property' in entity