当前位置:  开发笔记 > 编程语言 > 正文

Django,Postgres - 列不能自动转换为整数类型

如何解决《Django,Postgres-列不能自动转换为整数类型》经验,为你挑选了1个好方法。

在我的数据库中我有专栏:

currency = models.CharField(max_length=10, blank=True, null=True)

我想将此列更改CharFieldIntegerField.所以在models.py我改变这个:

currency = models.IntegerField(blank=True, null=True)

然后我做了迁移:python manage.py makemigrationspython manage.py migrate.在那个动作之后它会出现错误:

django.db.utils.ProgrammingError: column "currency" cannot be cast automatically to type integer
HINT:  Specify a USING expression to perform the conversion.

之后在pgAdmin3控制台中进行了以下更改:

ALTER TABLE my_table ALTER COLUMN currency TYPE integer USING (currency::integer);

但我仍然有这个错误,我试图改变所有,但错误不会消失.我必须做什么来逃避这个错误.谢谢



1> DhiaTN..:

我认为django迁移不执行转换,我查看了文档,但我没有发现任何有关列转换的事情.

如果现有数据对您来说不重要,您可以删除该列并创建一个新列

    第一步从您的模型中删除货币并应用迁移

    使用新定义再次添加货币并再次应用迁移

如果要保留数据,则需要为新列指定一个不同的名称,并使用旧列作为临时列来保留转换期间的数据.

重要提示: PostgreSQL是更强类型的最新版本,并为解释在这里,除非它明确地做了一些铸造可能无法在PosgreSQL工作.它需要更具体的类型.所以你必须根据你的价值做出正确的选择:

alter table my_table alter column currency type bigint using currency::bigint

或者可能:

alter table my_table alter column currency type numeric(10,0) using currency::numeric

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有