Django2.1.4 ORM疑似存在重大BUG!

初次使用Django2.1.4做web单页应用(Python3.7.1),models.py 使用models.IntegerField()定义orm映射,mysql数据库版本8.0.12-winx64,使用INT类型字段,当该字段为非零情况时,可以正常查询出结果,当字段值为零时,无论使用ORMQuerySet,还是原生SQL方式(RawQuerySet、cursor)查询0值结果均为None,疑似IntegerField()把0值当False在处理;当使用models.CharField()时,把数据库字段由INT改为VARCHAR时,可以正常查询出"0"值。请教各位大神可有破解之法。小弟感激不尽!

# 初始页面
def querylist(request):
    qs = ExcelView.objects.get(case_no='20191090500344')
    print("qs-----------------------------")
    print(type(qs))
    print(qs.case_no, qs.payment_amount, qs.current_added_score, qs.current_total_score)
    print("rqs----------------------------")
    rqs = ExcelView.objects.raw("select * from caseinfo_excelview where `案件编号`=20191090500344")
    print(type(rqs))
    for v in rqs:
        print(v.case_no, v.payment_amount, v.current_added_score, v.current_total_score)
    print("cursor-------------------------")
    cursor = connection.cursor()
    cursor.execute("select * from caseinfo_excelview where `案件编号`=20191090500344")
    raw = cursor.fetchone()
    print(type(raw))
    print(raw)
    return render(request, 'querylist.html', {})
# -*- coding: UTF-8 -*-
from django.db import models

# Create your models here.
class ExcelView(models.Model):
    case_no = models.CharField(db_column='案件编号', max_length=20, primary_key=True) # 案件编号
    amount_of_penalty = models.IntegerField(db_column='处罚金额(元)', default=0) # 处罚金额(元)
    amount_receivable = models.IntegerField(db_column='应收金额(元)', default=0) # 应收金额(元)
    payment_amount = models.IntegerField(db_column='缴费金额', default=0) # 缴费金额
    current_added_score = models.IntegerField(db_column='当前所加分值', default=0) # 当前所加分值
    current_total_score = models.IntegerField(db_column='当前分值合计', default=0) # 当前分值合计
    def __str__(self):
        return self.case_no

    def __unicode__(self):  # __str__ on Python 3
        return self.case_no

    # def __next__(self):
    #     return [field.value_to_string(self) for field in ExcelView._meta.fields]

    # def __iter__(self):
    #     return self

    class Meta:
        db_table = "caseinfo_excelview"

图片描述

图片描述

阅读 2.3k
2 个回答
新手上路,请多包涵

问题已经定位并解决。原来不是Django的锅,是mysql驱动的问题,我用的mysql-connector-python==8.0.13,这货bug超级多,使用ORM聚合函数都要报各种奇葩错误,stack overfolw上也是被吐槽不少。使用mysqlclient就没有上述0值Integer查询结果为None的问题,而且聚合函数使用也没毛病。
图片描述

别总是想着搞个大新闻。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题