django - 将 PositiveIntegerField 迁移到 FloatField
问题描述
我有一个现有的填充数据库,想将 aPositiveIntegerField
转换为FloatField
. 我正在考虑简单地进行迁移:
migrations.AlterField(
model_name='mymodel',
name='field_to_convert',
field=models.FloatField(
blank=True,
help_text='my helpful text',
null=True),
),
该字段当前定义为:
field_to_convert = models.PositiveIntegerField(
null=True,
blank=True,
help_text='my helpful text')
这是否需要完全重写数据库列?这种转换对于大型数据库的规模有多大?如果绝大多数值是 ,它会如何扩展null
?在什么情况下这种转换会失败?如果这有所作为,这是由 Postgres 数据库支持的。
解决方案
这是否需要完全重写数据库列?
不,不会的。我对 PostgreSQL、MySQL 和 SQLite 做了一个实验,从整数到浮点数的转换在每种情况下都很顺利,我还将一些值设置为 null 以匹配您的情况。
如果您有一个值3
,它只会更改为3.0
.
如果绝大多数值为空,它会如何扩展?
好吧,由于您保留null=True
字段的配置,所有空值都将保持为空,这没问题。如果您删除null=True
,您可能需要指定一个default
值。
在什么情况下这种转换会失败?
取一个 int 列并将其转换为 float(实数)应该不会失败,如果您发现一个奇怪、怪异且非常特殊的情况,那将是一个非常大的发现。
如果您对迁移结果有疑问...
...您可以先使用sqlmigrate查看迁移 SQL ,当然,您可以备份数据库。
推荐阅读
- java - Firebase 聊天应用程序没有像 whatsapp 那样显示消息
- c++ - C ++模板化元编程,检查结构是否有字段
- javascript - 如何在循环的每次迭代中等待异步操作完成
- java - 从 Java 源代码调用 Postgres 过程不起作用
- javascript - 单击 li 项目后更改 div 的背景颜色
- python - fetchall() psycopg2 返回空列表
- spring - Embedded Tomcat Hardening - 如何在 Spring Boot 中更改/覆盖广告服务器信息?
- regex - 使用 regexmatch 计算某些文本出现的次数
- django - 从模型实例引用的资产文件,如何限制对 URL 的访问
- javascript - 在 javascript 中映射文本响应