Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 如何检查值为None的字段是否存储在数据存储中或根本不存储?_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Google app engine 如何检查值为None的字段是否存储在数据存储中或根本不存储?

Google app engine 如何检查值为None的字段是否存储在数据存储中或根本不存储?,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,让我们解释一下这个问题 我们定义了一些类DeleteMe并在实体上创建: class DeleteMe(db.Model): a = db.FloatProperty() DeleteMe(key_name = '1').put() 现在我们可以读到: print DeleteMe.get_by_key_name('1').a # = None print DeleteMe.get_by_key_name('1').a # = None and None in datastore pr

让我们解释一下这个问题

我们定义了一些类DeleteMe并在实体上创建:

class DeleteMe(db.Model):
  a = db.FloatProperty()

DeleteMe(key_name = '1').put()
现在我们可以读到:

print DeleteMe.get_by_key_name('1').a
# = None
print DeleteMe.get_by_key_name('1').a
# = None and None in datastore
print DeleteMe.get_by_key_name('1').b
# = None but value b is not stored in datastore
现在我们更改模型以添加新字段

class DeleteMe(db.Model):
  a = db.FloatProperty()
  b = db.FloatProperty()
现在我们可以读到:

print DeleteMe.get_by_key_name('1').a
# = None
print DeleteMe.get_by_key_name('1').a
# = None and None in datastore
print DeleteMe.get_by_key_name('1').b
# = None but value b is not stored in datastore
如何区分a=None和b=None,并获取存储了a但未存储b的信息——如果您确实进行了查询,这一点很重要

DeleteMe.all().filter('a', None) # = 1 result
DeleteMe.all().filter('b', None) # = 0 result

您需要为属性设置一个默认值,一旦属性添加到模型中,每个实体都需要重写。是的,但我想确定什么是重写-而不是重写所有实体,因为它在大型数据集上不好。需要一些函数来确定更改。这很公平,尽管您确实说过它对查询很重要。模式迁移通常是更新实体的时间。基本上,底层原始实体没有该属性。所以你需要检查一下。您的示例使用了
db
,如果查看
\u entity
属性,您可以看到特定实体是否实际存在有问题的属性。如果使用ndb,您可以检查原始字典实体的
\u value
属性。嘿,您想要一个解决方案。据我所知,没有其他方法可以做你想做的事。原始实体必须存在于模型实体中。api将来可能会改变,但是db_实体自2008年发布以来一直没有改变。此外,db没有得到任何新的工作,因此在
\u entity
属性消失之前,您可能会在那里遇到死角。