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

开发环境:

系统:linux

框架:django2.2

数据库:MySQL8.0

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

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

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

django2.2使用mysql连接工具mysql-connector-python爬坑_第1张图片

然后使用时候坑来了

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'

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

你可能感兴趣的:(django2.2使用mysql连接工具mysql-connector-python爬坑)