admin

在Django中更改mysql-python(MySQLdb)的CLIENT_FOUND_ROWS标志?

sql

INSERT ... ON DUPLICATE KEY UPDATE在正常的Django项目中对MySQL
5.5行造成不匹配cursor.rowcount的问题

根据文档

对于INSERT … ON DUPLICATE KEY
UPDATE语句,如果将行作为新行插入,则每行的受影响行值为1;如果更新了现有行,则为2;如果将现有行设置为当前值,则为0。 。
如果指定CLIENT_FOUND_ROWS标志 ,则在将现有行设置为其当前值的情况下,受影响的行值为1(而不是0)。

所以我尝试了一下,似乎在mysql shell中,重复该INSERT ... ON DUPLICATE KEY UPDATE语句将显示

查询正常,受影响的0行(0.00秒)

在mysql-python(导入MySQLdb)中,

cursor.rowcount 无论插入/更新/什么都没有更新,将始终为1

我到处搜索,找不到CLIENT_FOUND_ROWS在Django中更改标志的方法。有人知道吗?


阅读 177

收藏
2021-07-01

共1个答案

admin

好的,我知道了。

在django / db / backends / mysql / base.py中有

kwargs['client_flag'] = CLIENT.FOUND_ROWS
kwargs.update(settings_dict['OPTIONS'])

从源代码中,我们可以像这样更改django项目settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.',
        'NAME': '',                      
        'USER': '',                      
        'PASSWORD': '',                  
        'HOST': '', 
        'PORT': '',                      
        'OPTIONS': {
            'client_flag': 0
        }
    }
}
2021-07-01