Google app engine 如何将DateProperty转换/迁移为DateTimeProperty

Google app engine 如何将DateProperty转换/迁移为DateTimeProperty,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,我知道DateProperty和DateTimeProperty的区别 我也很欣赏如何通过任务维护我的模式(尤其是属性的缺失值) 但是我有一个带有date\u field=db.DateProperty 我发现我几乎总是想要db.DateTimeProperty的(时间)精度,如何将此字段从DateTime转换为DateTimeProperty 我的问题是: 怎么做 ie只需从date\u field=db.DateProperty更改为date\u field=db.DateTimeP

我知道DateProperty和DateTimeProperty的区别

我也很欣赏如何通过任务维护我的模式(尤其是属性的缺失值)

但是我有一个带有
date\u field=db.DateProperty
我发现我几乎总是想要
db.DateTimeProperty
的(时间)精度,如何将此字段从
DateTime
转换为
DateTimeProperty

我的问题是:

  • 怎么做
    • ie只需从
      date\u field=db.DateProperty
      更改为
      date\u field=db.DateTimeProperty
  • 它会自动更新现有实体吗?
    • ie或我必须创建一个任务来更改它们
  • 如果具有相同属性的实体具有不同的类型,那么对该属性的过滤和排序是如何工作的?
    • 将ie DateProperty设置为datetime.datetime值
当查询涉及具有混合类型值的属性时 数据存储使用基于内部 陈述:

  • 定点数
    • 整数
    • 日期和时间
    • 有哪些结果/陷阱
      • ie验证错误

    我尝试了问题中预期的最简单的选项。db.Model设计师也预期到了这一点,它看起来(也就是说,很容易做到!)

    • 怎么做
      • 是:只需从date\u field=db.DateProperty更改为date\u field=db.DateTimeProperty即可
    • 它会自动更新现有实体吗?
      • 种类:特别是
        DateProperty.get\u value\u for_datastore
        方法实际上将任何
        datetime.date
        对象转换为
        datetime.datetime
        对象,然后将其作为“原始值”存储在数据库中
      • 现有实体并不是真正自动更新的,它们只是开始使用
        DateTimeProperty。从\u数据存储
        生成\u值,\u(与
        get\u value\u for \u数据存储
        )相反),返回
        属性。从\u数据存储
        生成\u值,\u返回原始值;
        datetime.datetime
        对象;不将其“截断”为
        datetime.date
        对象
      • 无需:…创建一个任务来更改它们
    • 如果具有相同属性的实体具有不同的类型,那么对该属性的过滤和排序是如何工作的?
      • 在这种情况下不相关;它们具有相同的底层类型
      • 虽然“基于内部表示的确定性排序”语句在同一项目符号中列出了日期和日期时间,但这表明它们有一个共同的内部表示,因此它们在排序/筛选等方面具有可比性
    • 有哪些结果/陷阱
      • 在这种情况下未遇到任何问题;也许有人有其他数据类型迁移/转换的故事

    很好的总结。当转换某些类型时,新类型将导致验证错误,我已获取底层数据存储对象,而未使用模型。这意味着你只是在用字典。什么样的方法(批量更新与延迟更新)将取决于迁移过程中会造成多少中断,以及您的模型是否能够处理不同的类型。@TimHoffman,您如何获取底层数据存储对象而不使用模型?看看这个问题,我在答案中提供了执行此操作的代码