为什么 Google App Engine NDB 数据存储对于未知数据同时具有“—”和 "null"?
Why does the Google App Engine NDB datastore have both "—" and "null" for unkown data?
我最近更新了一个实体模型以包含一些额外的属性,并发现了一些奇怪的地方。对于从未写入的属性,Datastore 查询页面显示“—”,但对于我在 Python 中明确设置为 None
的属性,它显示 "null".
在 SQL 中,这两种情况都将为空。当我查询具有两种类型的未知属性的实体时,它们都读作 None
,这符合该想法。
如果我无法以编程方式区分它们,为什么 NDB 数据存储查看器会区分 "never written" 和 "set to None
"?
您必须将该值专门设置为 NULL,否则它不会存储在数据存储中,您会在数据存储查看器中看到它丢失。
这是一个重要的区别。可以为 NULL 值编制索引,因此您可以检索出生日期为空的实体列表。另一方面,如果您在出生日期未知时未设置出生日期,则无法检索缺少出生日期 属性 的实体列表 - 您必须遍历所有实体以找到他们。
另一个区别是 NULL 值在数据存储中采用 space,而缺失值则不会。
我最近更新了一个实体模型以包含一些额外的属性,并发现了一些奇怪的地方。对于从未写入的属性,Datastore 查询页面显示“—”,但对于我在 Python 中明确设置为 None
的属性,它显示 "null".
在 SQL 中,这两种情况都将为空。当我查询具有两种类型的未知属性的实体时,它们都读作 None
,这符合该想法。
如果我无法以编程方式区分它们,为什么 NDB 数据存储查看器会区分 "never written" 和 "set to None
"?
您必须将该值专门设置为 NULL,否则它不会存储在数据存储中,您会在数据存储查看器中看到它丢失。
这是一个重要的区别。可以为 NULL 值编制索引,因此您可以检索出生日期为空的实体列表。另一方面,如果您在出生日期未知时未设置出生日期,则无法检索缺少出生日期 属性 的实体列表 - 您必须遍历所有实体以找到他们。
另一个区别是 NULL 值在数据存储中采用 space,而缺失值则不会。