Django-ORA-01438:值大于此列允许的指定精度

时间:2019-01-02 12:32:21

标签: django oracle

我的Oracle数据库中有一个表,其中她的一列是NUMBER(38,0)

如果我直接在数据库中插入一个数字,如“ 6688930737147338195”,则插入正常。

但是,当我将Django object.save()与数字结合使用时,会出现此错误:

django.db.utils.DatabaseError: ORA-01438: value larger than specified precision allowed for this column

我在oracle数据库中运行了此代码以尝试解决此问题:

ALTER TABLE XYZ MODIFY Z NUMBER(38,0); COMMIT;

但是Django中的问题仍然存在。它给出了相同的错误。 但是,由于某种原因,即使发生此错误,该对象仍保存在数据库中。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。

发生这种情况是因为我在项目中使用了django-simple-history插件。 此插件使用模型规格下面的行记录您models.py中指定模型中的修改:

class Foo(models.Model):
    id = models.AutoField(primary_key=true)
    #This line below
    history = HistoricalRecords()

因此,在我遇到此问题的模型中,为他启用了此插件。如果我将AutoField更新为BigAutoField,则执行Django makemigrations时不会更新此模型的HistoricalRecords表。

解决方案是: 注释HistoricalRecords()行---> makemigrations,迁移--->取消注释HistoricalRecords()-> makemigrations,再次迁移