1

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 中更改标志的方法。有谁知道怎么做?

4

1 回答 1

0

好的,我知道怎么做了。

在 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
        }
    }
}
于 2013-09-28T03:11:17.223 回答