【发布时间】:2021-03-25 15:35:59
【问题描述】:
晚上好,
我意识到过去可能有人问过这个问题,但我收到以下错误
“psycopg2.errors.NumericValueOutOfRange:整数超出范围” 和 “django.db.utils.DataError:整数超出范围”
在 Django 中使用 postgresql 时。
对类似查询的其他回复似乎都表明我正在达到非常大的 id 或 pk。不是这种情况。我的数据库非常小,我只是想将对象保存到其中,而且我不可能达到 2^31-1 个 id。有些对象可以保存,有些则不会并引发错误。它似乎没有规律,而且令人愤怒。
直到最近我一直在使用 sqlite,但我从来没有遇到过这个问题。
我是 postgresql 的新手,但数据库存在,已成功迁移,我可以看到 pgAdmin 中的字段。
该项目相当复杂,如果不发布大量代码,我无法提供最低限度的可重现示例,但我很乐意详细说明。
以上原因可能是什么?
按要求提供的models.py部分:
class Requirement(models.Model):
module = models.ForeignKey(Module, on_delete=models.CASCADE, null=False)
signups = models.ManyToManyField('Student', through='SignUp', blank=True)
etc.
class Student(models.Model):
first_name = models.CharField(max_length=50, null=False)
signups = models.ManyToManyField('Requirement', through='SignUp')
etc.
class Signup(models.Model):
requirement = models.ForeignKey(Requirement, on_delete=models.CASCADE, null=False)
student = models.ForeignKey(Student, on_delete=models.SET_NULL, null=True)
etc.
【问题讨论】:
-
我认为@Ben 的意思是,如果您有一些整数字段,则该字段中的数字可能会超过。但我在你的模型中没有看到任何 intergerfield....
-
为了保险起见,如果你把intergerfield改成BigIntergerfield,看看这个错误会不会消失?
-
您好,我相信 BigIntegerField 已经修复了。我不确定如何。至少在我做过的几个测试中它没有触发错误。如果是这样,那我非常感激。
-
看看你新保存的那些 BigIntegerFields 的数据......在那里你会找到你想要的答案。
-
这是一个随机的个人标识符,显然比我想象的要大得多。它从来没有用 sqlite3 触发过这个问题,这就是我没有想到的原因。所有其他 cmets 都在暗示 pk 会很大,我试图了解这怎么可能。
标签: django postgresql psycopg2