在django中为mysql-python(MySQLdb)更改CLIENT_FOUND_ROWS标志?

时间:2013-09-28 02:21:43

标签: python mysql sql django mysql-python

我有一个问题,MySQL 5.5 INSERT ... ON DUPLICATE KEY UPDATE行在正常的Django项目中影响了mismatch cursor.rowcount

根据doc

  

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

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

  

查询OK,0行受影响(0.00秒)

在mysql-python(导入MySQLdb)中,

无论插入/更新/没有更新

cursor.rowcount将始终为1

我到处搜索,无法找到改变Django中CLIENT_FOUND_ROWS标志的方法。谁知道怎么做?

1 个答案:

答案 0 :(得分: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
        }
    }
}