变化在Django针对MySQL的Python(MySQLdb的)CLIENT_FOUND_ROWS

2019-09-28 07:57发布

我有与MySQL 5.5中的问题INSERT ... ON DUPLICATE KEY UPDATE在正常的Django项目影响的不匹配cursor.rowcount行

据商务部 :

对于INSERT ... ON DUPLICATE密钥更新语句,每行中的受影响的行值是1,如果如果现有的行被设置为它的当前值的行被插入作为一个新的行,2如果现有的行被更新,和0 。 如果指定了CLIENT_FOUND_ROWS标志 ,则受影响的行值是,如果1(不为0)现有的行设置为当前值。

于是,我就在了,似乎在mysql外壳,重复INSERT ... ON DUPLICATE KEY UPDATE语句将显示

查询确定,受影响的0行(0.00秒)

在MySQL的Python(进口MySQLdb的)

cursor.rowcount永远是1,无论插入/更新/更新无关

我到处找,找不到一种方法来改变CLIENT_FOUND_ROWS标志在Django。 任何人都知道怎么样?

Answer 1:

好吧,我发现了如何。

在Django / DB /后端/ 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
        }
    }
}


文章来源: change CLIENT_FOUND_ROWS flag in django for mysql-python (MySQLdb)?