gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:42:59 26 4
gpt4 key购买 nike

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

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

UPDATE table
SET field =
IF(field < 10, 10, field) WHERE id = 1

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

这给我们带来了一些麻烦,因为我们必须首先执行选择查询以确定是否有更改。它是 SQLAlchemy 中的错误吗?文档明确指出,如果应该返回受影响的行数,而不是匹配行数。

谢谢。

最佳答案

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

For UPDATE statements, the affected-rows value by default is the number of rows actually changed. If you specify the CLIENT_FOUND_ROWS flag to mysql_real_connect() when connecting to mysqld, the affected-rows value is the number of rows “found”; that is, matched by the WHERE clause.

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

  • “找到”的行数(与 WHERE 子句匹配的行数)
  • 实际“更新”的行数(其中至少一列中的值已更改)

关于与 sqlalchemy 的关系,我不确定这是一个错误还是只是文档需要用更好的措辞进行更新。
在任何情况下,您都可以通过用另一个语义相同的语句重写您的 SQL 语句来解决问题:

UPDATE  table
SET field = 10
WHERE id = 1
AND field < 10

关于python - 当 UPDATE 没有受影响的行时,SQLAlchemy ResultProxy.rowcount 不为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10982207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com