2009-03-31 5 views

Antwort

21

Obwohl es nicht wirklich in der Dokumentation angegeben ist, hat ein ResultProxy Objekt auch eine rowcount Eigenschaft.

+0

'rowcount' ist eigentlich nicht die Anzahl der betroffenen Zeilen * *. Siehe meine Antwort für Details. –

+0

Die Dokumentation enthält in diesen Tagen 'rowcount': http://docs.sqlalchemy.org/en/latest/core/connections.html#sqlalchemy.engine.ResultProxy.rowcount –

5

rowcount ist nicht die Anzahl der betroffenen Zeilen. Es ist die Anzahl der übereinstimmenden Zeilen. Sehen Sie, was doc sagt

Dieses Attribut gibt die Anzahl der Zeilen zurück abgestimmt, die nicht unbedingt das gleiche wie die Anzahl der Zeilen, die tatsächlich waren modifizierte - eine UPDATE-Anweisung, zum Beispiel, kann kein Netz haben Änderung an einer gegebenen Zeile, wenn die angegebenen SET-Werte dieselben sind wie die bereits in der Zeile vorhandenen. Solch eine Zeile würde übereinstimmen, aber nicht geändert werden. Auf Backends, die beide Stile, wie MySQL verfügen, ist rowcount standardmäßig konfiguriert, um die Anzahl in allen Fällen

Also für die beiden folgenden Szenarien zurück rowcount1 berichten. Wegen Rows matched: 1

  1. eine Zeile mit update Anweisung geändert.

    Query OK, 1 row affected (0.00 sec) 
    Rows matched: 1 Changed: 1 Warnings: 0 
    
  2. gleiche update Anweisung ausgeführt wird.

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