如何获取受 SQL Alchemy 影响的行数?

Posted

技术标签:

【中文标题】如何获取受 SQL Alchemy 影响的行数?【英文标题】:How do I get the number of rows affected with SQL Alchemy? 【发布时间】:2012-10-01 09:45:55 【问题描述】:

如何使用 sqlalchemy 获取更新语句受影响的行数? (我正在使用 mysql 和 python/pyramid):

from sqlalchemy.engine.base import ResultProxy

@classmethod
def myupdate(cls, id, myvalue):
    DBSession.query(cls).filter(cls.id == id).update('mycolumn': myvalue)
    if ResultProxy.rowcount == 1:
        return True
    else:
        return False

注意:我看到this post,但根据the docs:“'rowcount' 报告与 UPDATE 或 DELETE 语句的 WHERE 条件匹配的行数。”....换句话说,它没有'不返回更新或删除语句影响的行数。

【问题讨论】:

【参考方案1】:

根据the doc,您可以通过为 DBAPI 指定正确的选项来覆盖此行为。

我没有准备好测试的 mysql,但我认为将正确的选项(client_flagfound_rows=False,取决于使用的 api)添加到配置 url 应该可以解决问题。查看mysqlconnector 和oursql 的相应来源以获取更多信息。

我希望这足以帮助你。

【讨论】:

试图弄清楚。我不知道我会在哪里改变它。我是金字塔、sqlalchemy 和 python 的新手。 你在某个地方有一个数据库的配置 url,类似于 mysql+mysqlconnector://user:passwd@host/db 你可以像在 get 请求中一样在末尾添加一些参数:mysql+mysqlconnector://user:passwd@host/db?found_rows=False 我收到一个错误:“'found_rows' 是此函数的无效关键字参数 无 无” 哦,对不起,我好像把这两个弄混了。你可以试试mysql+oursql://user:passwd@host/db?found_rows=False 吗? 补充说,但是我们的sql 的添加使任何查询变得缓慢。我尝试测试它,但对缓慢感到沮丧。设置 found_rows=False 似乎不起作用

以上是关于如何获取受 SQL Alchemy 影响的行数?的主要内容,如果未能解决你的问题,请参考以下文章

仅执行动态查询以获取受影响的行数

postgresql函数-获取受更新查询影响的行数[重复]

如何在 WordPress 查询中获得受影响的行数?

sqlserver里面执行sql语句的时候 怎么获取受影响行数

返回受 UPDATE 语句影响的行数

在 SQLite-WinRT 包装器中使用“更新”或“删除”查询获取受影响的行数