首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当UPDATE没有受影响的行时,SQLAlchemy ResultProxy.rowcount不为零

问当UPDATE没有受影响的行时,SQLAlchemy ResultProxy.rowcount不为零
EN

Stack Overflow用户
提问于 2012-06-11 22:35:47
回答 1查看 1.7K关注 0票数 2

我们有一个MySQL数据库,并且我们正在从DB切换到SQLAlchemy。根据文档,ResultProxy.rowcount应该通过UPDATE语句报告受影响的行数。

如果我使用SQLAlchemy执行此查询:

代码语言:javascript
复制
UPDATE table
SET field =
IF(field < 10, 10, field) WHERE id = 1

如果有匹配的行,但对于任何"field“值(即使大于或等于10),它将返回行数1。当我使用DB API执行这个查询时,它返回了正确的受影响行数(当field大于或等于10时返回0,如果field小于10时返回1)。

这给我们带来了一些麻烦,因为我们必须首先执行一个select查询来确定是否有更改。这是SQLAlchemy中的一个bug吗?文档清楚地指出,if应该返回受影响的行数,而不是匹配的行数。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-12 15:31:08

没有使用MySQL的经验,但是ROW_COUNT()的文档显示:

对于UPDATE语句,

-rows值缺省情况下是实际更改的行数。如果在连接到mysqld时将CLIENT_FOUND_ROWS标志指定为mysql_real_connect(),那么mysqld-rows值就是“找到”的行数;也就是说,与WHERE子句匹配。

因此,根据连接的配置方式,结果可能是以下两种之一:

  • 找到的行数(那些与实际“更新”行的WHERE clause)
  • number匹配的行数(其中至少有一列中的值已更改)

至于与sqlalchemy的关系,我不确定它是一个bug,还是仅仅是文档需要用更好的措辞进行更新。

在任何情况下,您都可以通过使用另一个语义相同的语句重写SQL语句来解决这个问题:

代码语言:javascript
复制
UPDATE  table
SET     field = 10
WHERE   id = 1
    AND field < 10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10982207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档