Как получить количество затронутых строк в sqlalchemy? - PullRequest
25 голосов
/ 31 марта 2009

У меня есть один вопрос, касающийся Python и модуля sqlalchemy. Что эквивалентно cursor.rowcount в sqlalchemy Python?

Ответы [ 3 ]

26 голосов
/ 31 марта 2009

Хотя это и не указано в документации, объект ResultProxy также имеет свойство rowcount.

7 голосов
/ 21 апреля 2017

rowcount - это , а не количество затронутых строк. Это количество подходящих строк. Посмотрите, что Док говорит

Этот атрибут возвращает количество строк совпавших , которое не обязательно совпадает с количеством строк, которые были фактически изменены - например, оператор UPDATE может Чистое изменение в данной строке, если заданные значения 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
    
0 голосов
/ 07 декабря 2018

То, что Шиплу говорит, конечно, правильно, однако, чтобы ответить на вопрос, во многих случаях вы можете легко сделать сопоставленные столбцы равными измененным столбцам, включив условие, что значение отличается в предложении WHERE, то есть:

UPDATE table
SET column_to_be_changed = "something different"
WHERE column_to_be_changed != "something different" AND [...your other conditions...]

rowcount будет затем возвращать количество затронутых строк, поскольку оно равно количеству совпадающих строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...