【问题标题】:NDB datastore. How to tell the difference between a default value and one that has not been setNDB 数据存储。如何区分默认值和未设置的值
【发布时间】:2015-12-16 16:53:17
【问题描述】:

我在名为“空白”的模型上创建了一个新的布尔属性,默认值为 False。

我想回去设置尚未设置的。但我不想更新已添加并实际设置为默认 False 的新内容。

当我打印出对象时,我在其输出中看不到“空白”。

但如果我这样做了

obj.blank

我看到“错误”。

所以我真的只是想知道 - 是在这个 obj 上实际设置了 False 还是只是返回了默认值。

有什么办法吗?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    如果您从一开始就设置了默认值,这将保证该属性不会丢失,即使用户没有更新/更改它。所以我猜你后来添加了这个值。我建议您通过您的实体运行批处理任务或其他东西,只需put(),因此如果缺少它,它实际上会设置默认值。

    话虽如此,我不确定以后是否可以检查。

    【讨论】:

    • 了解数据存储的无模式本质是这些答案正确的关键。较旧的实体仍然存在,它们根本没有财产。 “无”对于像“if”这样的条件测试来说已经足够虚假了,尽管我怀疑该属性是否存在于对象上并且实际上 具有 OP暗示的值“False”。
    【解决方案2】:

    在更改之前保存的每个实体都没有保存在数据存储区中的空白属性。

    当您获得其中一个实体并请求空白属性时,您应该得到 None 作为结果。

    getattr(entity_saved_before_change, 'blank') == None   # this returns True
    
    isinstance(getattr(entity_saved_after_change, 'blank'), bool) == True   # this returns True
    

    所以,只需检查值是否为 None。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-20
      • 2023-03-30
      • 2019-02-04
      • 1970-01-01
      • 2017-05-07
      • 2011-12-29
      • 2012-07-22
      • 2021-10-30
      相关资源
      最近更新 更多