Django中PositiveInteger和PositiveSmallInteger字段之间的区别

时间:2018-04-12 08:08:12

标签: django django-models

Django源代码中的PositiveInteger和PositiveSmallInteger字段之间没有区别。但是,Django文档说,

PositiveInteger starts from 0 to 2147483647 and PositiveSmallInteger starts from  0 to 32767.

请澄清这两种类型之间的区别。

提前致谢。

1 个答案:

答案 0 :(得分:2)

这就是其中之一,因为它就是这样。

Django支持SmallIntegerField因为Django在PostgreSQL上长大,而PostgreSQL支持smallint。 PosgreSQL docs

  

通常仅在磁盘空间非常宝贵的情况下才使用smallint类型。

如果你检查Django的backends,代码也会有区别。在那里,您会看到它在某些数据库中使用SMALLINT功能,例如sqlite

...
class FlexibleFieldLookupDict:
    # Maps SQL types to Django Field types. Some of the SQL types have multiple
    # entries here because SQLite allows for anything and doesn't normalize the
    # field type; it uses whatever was given.
    base_data_types_reverse = {
        'bool': 'BooleanField',
        'boolean': 'BooleanField',
        'smallint': 'SmallIntegerField',
        'smallint unsigned': 'PositiveSmallIntegerField',
        'smallinteger': 'SmallIntegerField',
        'int': 'IntegerField',
        'integer': 'IntegerField',
        'bigint': 'BigIntegerField',
        'integer unsigned': 'PositiveIntegerField',
        'decimal': 'DecimalField',
        'real': 'FloatField',
...