Django模型或数据库后端中的AutoField是否有限制?
我正在研究的Django项目可能会在某些数据库表中看到很多对象,这些对象会在很短的时间内超过40000。
我正在使用Sqlite for dev和Postgresql进行制作。
答案 0 :(得分:5)
添加此作为答案。 Django将其映射到串行列,这意味着最大值在20亿范围内(准确地说是2,147,483,647)。虽然对于大多数应用程序来说这不太可能是一个问题,但如果你这样做,你可以改变类型而不是变成bigint,这将使你很可能无法达到64位int空间的末尾。
答案 1 :(得分:4)
为Django 2.x
添加新信息:
Djangos AutoField
是IntegerField
。 IntegerField
的文档说:
从
-2.147.483.648
到2.147.483.647
的值在Django支持的所有数据库中都是安全的。
AutoField
默认情况下仅使用正数,因此值可以从1
到2.147.483.647
。
自Django 1.10
起,还有一个BigAutoField
,与BigIntegerField
非常相似。
BigAutoField
的文档说:
保证可以容纳从
1
到9.223.372.036.854.775.807
的数字的64位整数[...]。
现在,文档并未在此字段中明确说明,但使用is garanteed to fit
一词,我认为这适用于Django支持的所有数据库。
答案 2 :(得分:0)
正如其他人提到的那样,分别使用int
或bigint
是2.147.483.648
还是9.223.372.036.854.775.808
。
如果您认为超过这些数字,可以进行分片。 简而言之,分片是通过在多个数据库的多个表中存储同一表的不同行来水平划分数据的一种方法。
有许多适用于Django的分片库(例如django-sharding)