首页 > 解决方案 > Django IntegerField 在使用 MySQL 时检索 0 作为 None 值

问题描述

Django 已经开始检索我的所有值为零的 IntegerField 作为 None 而不是零。

这发生在我所有的模型中。我最近更新了 mysql-connector-python,所以我不确定这是否是问题所在。

有谁知道会导致 Django 在我的所有模型中开始执行此操作的全局设置或错误?

例子:

class Brands(models.Model):
   brand_id = models.AutoField(primary_key=True)
   brand_name = models.CharField(unique=True, max_length=512)
   blacklisted = models.IntegerField()
   blacklisted_date = models.DateTimeField(blank=True, null=True)
   date_created = models.DateTimeField()

   class Meta:
       managed = False
       db_table = 'brands'

黑名单的值都被检索为 None 而不是 0。它们在数据库中存储为 0。

Django 版本 2.2.1

MySQL InnoDB

感谢您的任何帮助,您可以提供。

标签: pythonmysqldjango

解决方案


此错误的解决方法:添加'use_pure': True到数据库选项。这迫使 mysql-connector-python 使用纯 python 连接而不是 C 扩展,我相信错误存在,请参见此处

DATABASES = {
    'default': {
        'ENGINE': 'mysql.connector.django',
        'NAME': os.environ['MYSQL_DATABASE'],
        'USER': os.environ['MYSQL_USER'],
        'PASSWORD': os.environ['MYSQL_PASSWORD'],
        'OPTIONS': {
            'use_pure': True,
    }
}

或者,您可以在 settings.py 文件中进行设置

'OPTIONS': {'use_pure': True }


推荐阅读