Django如果我想用postgresql将数据保存为最小类型(比如mysql中的1byte tinyint)怎么办?

2024-04-25 00:34:34 发布

您现在位置:Python中文网/ 问答频道 /正文

大家早上好(当地时间)

我和Django在星巴克工作。我遇到了一个问题,却没有办法解决它。在

我要保存的数据(整数类型)的范围是0~4。数据最多不超过255。当我读到Django的手册时,有一个SmallIntegerField,它是4字节的整数。当我搜索PostgreSQL的手册时,有一个smallint类型,它是2字节。在

但实际上,我的数据还不到1字节。所以我想使用范围在0到255之间的tinyint类型(当我在php中使用MySQL时,我使用了tinyint),如果我用4byte intergertype存储这些小数据,我觉得这是浪费时间。在

我想展示一些东西的雕像。 例如,0表示没有马桶。1是残疾人专用厕所,2是残疾人专用厕所,但不是残疾人专用厕所。如果我需要3个以上的选项,我不能用布尔类型覆盖它。(我看到一篇文章说Django的布尔类型是Tinyint。我在Django手册(1.10版)中找不到解释,也找不到PostgreSQL有tinyint类型。在

我怎样才能解决这个问题? 如果我只是保存一些数据,我不会太在意。但我要保存很多数据。用4byte整型保存非常小的数据似乎不是个好主意。在

谢谢你读这个。如果您对此有任何想法并给我任何建议,我将不胜感激。谢谢你!~


Tags: 数据django类型字节postgresql时间整数手册
1条回答
网友
1楼 · 发布于 2024-04-25 00:34:34

如果你真的想,你可以像这样子类一个现有的字段

from django.db import models, connection


class TinyIntegerField(models.PositiveSmallIntegerField):
    description = "Tiny Integer Field"

    def db_type(self, connection):
        #check backend db supports tinyint
        if any(_ in connection.settings_dict['ENGINE'] for _ in ['pyodbc', 'mysql']):
            return 'tinyint'
        else:
            return 'smallint'


class Foot(models.Model):
    numberoftoes = TinyIntegerField(default=5)

对于有符号的正/负tinyint,可以从models.SmallIntegerField继承,尽管sqlsever不支持负tinyint

看到了吗 https://docs.djangoproject.com/en/dev/howto/custom-model-fields/

相关问题 更多 >