Подтвердить что ты не робот

Как получить количество затронутых строк в sqlalchemy?

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

4b9b3361

Ответ 1

Объекты ResultProxy также имеют свойство rowcount.

Ответ 2

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
    

Ответ 3

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

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

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