【问题标题】:Django JSONFieldDjango JSON字段
【发布时间】:2017-12-15 21:09:42
【问题描述】:

我们已经使用 jsonfield 库中的 JSONField 有一段时间了,但现在我们想使用原生的 PostgreSQL JSONField。所以我想知道是否可以更改现有模型的字段类型,保留旧字段名称并且不会丢失任何数据。谢谢。

【问题讨论】:

    标签: python json django postgresql


    【解决方案1】:

    你想做的是data migration

    1. 保留现有的jsonfield 并添加新的PostreSQL JSONField
    2. 生成一个data migration,它遍历每条记录,将数据从旧字段迁移到新字段。
    3. 运行迁移后,您可以弃用旧字段并将其删除,而不会丢失任何数据。

    参考文献

    Django Data Migrations

    【讨论】:

      【解决方案2】:

      是的,您可以在不丢失数据的情况下更改字段的类型和名称。 每次更改 models.py 中的内容时,您只需运行 makemigrationsmigrate

      【讨论】:

      • 当您更改名称或类型时,如果一种或两种情况都为真,则可能会丢失数据: 1. Django 无法确定您是否要添加新字段并删除旧字段一。 2. Django 不知道如何将一种类型转换为另一种。 (即:stringint)。
      • 1.这就是为什么当出现混乱时,django 会询问(在运行 makemigrations 时)并且您必须回答 Yes/No ,以防他没有理解您的意思,您可以随时编辑迁移文件 2. 在这种情况下,可能会有错误,但不会丢失数据
      猜你喜欢
      • 1970-01-01
      • 2022-10-01
      • 2014-11-25
      • 1970-01-01
      • 2020-10-11
      • 2013-01-15
      • 2020-02-16
      • 2018-05-05
      • 2016-02-04
      相关资源
      最近更新 更多