首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django如果我想用postgresql将数据保存为最小的类型(比如mysql中的1byte tinyint )怎么办?

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

Stack Overflow用户
提问于 2016-10-08 08:34:30
回答 1查看 1K关注 0票数 0

大家早上好(当地时间)

我在星巴克和姜戈一起工作。我遇到了一个问题,我想不出办法来解决它。

我准备保存范围在0~4之间的数据(整型),数据最大不超过255。当我阅读Django的手册时,有一个SmallIntegerField,它是4字节的整数。嗯,当我搜索PostgreSQL的手册时,有一个小整数类型,有2个字节。

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

我想展示一些东西的雕像。例如,0表示没有卫生间。1是为残疾人而存在的厕所,2是为残疾人而不是残疾人而存在的厕所。如果我需要3个以上的选择,我不能用BooleanType覆盖它。(我遇到了一篇文章,上面说Django中的BooleanType是Tinyint。我在Django手册(版本1.10)中找不到解释,我也找不到PostgreSQL有tinyint类型。

我该如何解决这个问题?如果我只保存几个数据,我不会太在意。但是我要保存大量的数据。这似乎不是一个好主意保存数据,因为它是非常小的4字节整数类型。

感谢你阅读这篇文章。如果你对此有任何想法并给我任何建议,我将不胜感激。谢谢你!咖啡都喝完了~

EN

回答 1

Stack Overflow用户

发布于 2018-10-12 20:23:01

如果您真的想这样做,您可以像这样对现有字段进行子类化

代码语言:javascript
复制
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/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39927487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档