代码之家  ›  专栏  ›  技术社区  ›  est

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

  •  1
  • est  · 技术社区  · 12 年前

    我对MySQL 5.5有问题 INSERT ... ON DUPLICATE KEY UPDATE 行影响了不匹配的游标。普通Django项目中的rowcount

    根据 doc :

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

    所以我尝试了一下,似乎在mysql shell中,重复 插入。。。在重复密钥更新时 报表将显示

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

    在mysql-python(导入MySQLdb)中,

    cursor.rowcount 无论插入/更新/未更新,都将始终为1

    我到处找,找不到改变的方法 CLIENT_FOUND_ROWS Django的旗帜。有人知道怎么做吗?

    1 回复  |  直到 12 年前
        1
  •  0
  •   est    12 年前

    好吧,我知道怎么做了。

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

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

    从源代码中,我们可以更改django项目设置

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