【问题标题】:change CLIENT_FOUND_ROWS flag in django for mysql-python (MySQLdb)?在 django 中为 mysql-python (MySQLdb) 更改 CLIENT_FOUND_ROWS 标志?
【发布时间】:2013-10-04 10:41:51
【问题描述】:

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

根据doc

对于 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,无论插入/更新/没有更新

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

【问题讨论】:

    标签: python mysql sql django mysql-python


    【解决方案1】:

    好的,我知道了。

    在 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
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 2017-03-06
      • 2013-07-11
      • 2013-09-01
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多