我们有一个MySQL数据库,并且我们正在从DB切换到SQLAlchemy。根据文档,ResultProxy.rowcount应该通过UPDATE语句报告受影响的行数。
如果我使用SQLAlchemy执行此查询:
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应该返回受影响的行数,而不是匹配的行数。
谢谢。
发布于 2012-06-12 15:31:08
没有使用MySQL的经验,但是ROW_COUNT()的文档显示:
对于UPDATE语句,
-rows值缺省情况下是实际更改的行数。如果在连接到
mysqld时将CLIENT_FOUND_ROWS标志指定为mysql_real_connect(),那么mysqld-rows值就是“找到”的行数;也就是说,与WHERE子句匹配。
因此,根据连接的配置方式,结果可能是以下两种之一:
WHERE clause)至于与sqlalchemy的关系,我不确定它是一个bug,还是仅仅是文档需要用更好的措辞进行更新。
在任何情况下,您都可以通过使用另一个语义相同的语句重写SQL语句来解决这个问题:
UPDATE table
SET field = 10
WHERE id = 1
AND field < 10https://stackoverflow.com/questions/10982207
复制相似问题