我的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中的问题仍然存在。它给出了相同的错误。 但是,由于某种原因,即使发生此错误,该对象仍保存在数据库中。
我该怎么办?
答案 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,再次迁移