django2.2使用mysql连接工具mysql-connector-python爬坑

在Django 2.2环境下,使用mysql-connector-python驱动连接MySQL8.0时遇到问题。在创建模型并尝试保存时,即使指定`required=True`,也会因默认不允许为空而失败。更新记录时,发现Django 2.2需要在`save()`中指定`update_fields`参数,否则更新会失败。错误提示只有一个通用的`AttributeError`,没有明确的异常信息,导致排查困难。

开发环境:

系统:linux

框架:django2.2

数据库:MySQL8.0

驱动:mysql-connector-python(lastest version)

 本人是个折腾党,什么都喜欢用最新的

本来django使用mysql一直用的pymysql,但是不知道什么原因,可能是django2.2的原因,因为官方是推荐的mysql-connector

然后使用时候坑来了

class BookInfo(models.Model):
    title = models.CharField(max_length=20, verbose_name='名称')
    pub_date = models.DateField(verbose_name='发布日期')
    reading = models.IntegerField(default=0, verbose_name='阅读量')
    comment = models.IntegerField(default=0, verbose_name='评论量')
    image = models.ImageField(upload_to='book', verbose_name='图片', null=True)

 这是我的model,按道理来说,我都指定required=True,只要BookInfo(title='红楼梦‘)也是可以的,但是,save()却失败了,

原来django的ORM在建表的时候,如果不指定null=True的话,默认是不能为空的

第二个问题是:

当我要更新一条记录的某个字段是,例如

book = BookInfo.objects.get(id=1)
book.reading = 100
book.save()

以前1.x版本的时候,这样做完全没问题,但是2.2一直失败,检查了半天,最后终于明白了,2.2更新的时候,需要在save()中制定update_fields参数,负责就是更新失败

def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):
        """
        Save the current instance. Override this in a subclass if you want to
        control the saving process.

        The 'force_insert' and 'force_update' parameters can be used to insist
        that the "save" must be an SQL insert or update (or equivalent for
        non-SQL backends), respectively. Normally, they should not be set.
        """

        ...

这是源码里的说明

遇到这两个坑,让我郁闷的是,无论什么样的错误,都是一个提示

 return self._executed.strip()
AttributeError: 'NoneType' object has no attribute 'strip'

没有明确的异常抛出说明错误,难受,或者是我的做法不对,不知道这个异常提示的正确或者高级用法,还望来个大佬指点下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值