【问题标题】:What's the difference to set default value None or '' in Google cloud DataStore models?在 Google Cloud DataStore 模型中设置默认值 None 或 '' 有什么区别?
【发布时间】:2018-05-10 18:13:35
【问题描述】:

当我在 Google Cloud 中使用 DataStore 时,我对 None'' 的值有疑问。 例如

class User(ndb.Model):
    age = ndb.IntegerProperty(default=None)
    name = ndb.StringProperty(default='')
    address = ndb.StringProperty(default=None)

我设置默认值是因为我想索引并检索其中一个属性没有被赋值的实体列表。 将 StringProperty 默认值设置为 ''None 有什么区别? 哪个更好,为什么?

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore app-engine-ndb


    【解决方案1】:

    从索引的角度来看没有区别:None'' 都是属性将具有的实际值(与根本没有设置的值相反),因此实体将被索引。另见:Does NDB still index with default=None or properties set to None?

    StringProperty 设置为None(如果允许的话)将需要在使用时进行额外的类型检查,因为它可能同时包含stringNone 类型值。将其默认值设置为 '' 将不需要像 '' 是一个字符串这样的检查 - 因此该属性将始终包含 string 值。

    【讨论】:

    • 谢谢,丹!我还有一个问题。当我为一个属性赋值时,我无法再次将值更改为 None。当我想重置它们时,我只能将字符串 '' 放到这个属性中,对吗?这意味着''更好?
    • 这与为其设置默认值是一致的。对于我想取消设置的属性,我只是在保存它们之前使用del entity.property 删除它们,但我不确定这是否适用于具有默认值的属性 - 种类使拥有默认值的整个目的无效。
    猜你喜欢
    • 2019-02-04
    • 1970-01-01
    • 2020-03-07
    • 2020-01-26
    • 1970-01-01
    • 2018-03-08
    • 2020-06-10
    • 1970-01-01
    • 2019-02-17
    相关资源
    最近更新 更多