如何获取sqlalchemy中受影响的行数?

时间:2009-03-31 18:08:35

标签: python sqlalchemy

我有一个关于Python和sqlalchemy模块的问题。 sqlalchemy Python中cursor.rowcount的等价物是什么?

3 个答案:

答案 0 :(得分:25)

虽然文档中没有真正说明,但ResultProxy对象也有rowcount属性。

答案 1 :(得分:6)

rowcount 受影响的行数。它是匹配行的数量。查看doc说的内容

  

此属性返回匹配的行数,这些行不一定与实际修改的行数相同 - 例如,UPDATE语句可能如果给定的SET值与已存在的行中的SET值相同,则在给定行上没有净变化。这样的行将匹配但不会被修改。在具有两种样式(例如MySQL)的后端上,默认情况下配置rowcount以在所有情况下返回匹配计数

因此,对于以下两种情况,rowcount都会报告1。因为Rows matched: 1

  1. 使用update语句更改了一行。

    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
  2. 执行相同的update语句。

    Query OK, 0 row affected (0.00 sec)
    Rows matched: 1  Changed: 0  Warnings: 0
    

答案 2 :(得分:0)

Shiplu所说的当然是正确的,但是,要回答这个问题,在许多情况下,可以通过在WHERE子句中包含值不同的条件来轻松地使匹配的列等于更改的列,即:

delete3(_,[],[]).
delete3(X,[X|T],R):- delete3(X,T,R).
delete3(X,[H|T],[H|R]) :- delete3(X,T,R).

remove_duplicates([],[]).
remove_duplicates([H|T], [H|R]) :- 
    member(H,T),!,
    delete3(H,T,R1),
    remove_duplicates(R1,R).

remove_duplicates([H|T],[H|R]):-
    remove_duplicates(T,R).

UPDATE table SET column_to_be_changed = "something different" WHERE column_to_be_changed != "something different" AND [...your other conditions...] 将返回受影响的行数,因为它等于匹配的行数。