【问题标题】:Switching from StringProperty to StringProperty(repeated=True)从 StringProperty 切换到 StringProperty(repeated=True)
【发布时间】:2013-11-24 00:53:51
【问题描述】:

我正在稍微切换我的数据模型。我打算将 'repeated=True' 添加到当前存在的 stringProperty。我想知道这会不会搞砸什么?

【问题讨论】:

    标签: google-app-engine app-engine-ndb


    【解决方案1】:

    它应该可以工作,除非你有 None 值。单例属性值的磁盘表示几乎与具有一项的重复属性的表示相同,尽管存在一位差异(在 NDB 源代码中搜索“多个”),但在反序列化时会忽略该位。

    【讨论】:

      【解决方案2】:

      StringProperty() 是一个字符串,StringProperty(repeated=True) 是一个字符串列表。

      'foo' 与 ['foo']

      你肯定会遇到麻烦。

      【讨论】:

        【解决方案3】:

        您将不得不执行某种形式的架构迁移。如果您没有两个实体——比如少于 10,000 个,那么使用 remote_api 可能是最简单的。请参阅这个问题,Migrating data when changing an NDB field's property type - 我在答案中包含了一些代码,允许您在不使用模型的情况下检索原始实体。这允许您操作基础数据 - 在您的情况下,将字符串更改为字符串列表。

        我的立场是正确的。对不起。更重大的变化将需要迁移。

        【讨论】:

          猜你喜欢
          • 2015-02-17
          • 2017-04-30
          • 1970-01-01
          • 1970-01-01
          • 2012-07-12
          • 1970-01-01
          • 2019-02-14
          • 2017-02-21
          • 1970-01-01
          相关资源
          最近更新 更多