Как получить количество затронутых строк в sqlalchemy?
-
22-08-2019 - |
Вопрос
У меня есть один вопрос, касающийся Python и модуля sqlalchemy.Что является эквивалентом для cursor.rowcount
в sqlalchemy Python?
Решение
ResultProxy
объекты имеют rowcount
собственность в том числе.
Другие советы
rowcount
является не количество затронутых строк.Это количество совпадающих строк.Увидеть что док говорит
Этот атрибут возвращает количество строк подобранный, что не обязательно совпадает с количеством строк , которые были фактически измененный - оператор UPDATE, например, может не иметь чистых изменений в данной строке, если заданные значения совпадают с теми, которые уже присутствуют в строке.Такая строка была бы сопоставлена, но не изменена.На бэкэндах, которые используют оба стиля, таких как MySQL,
rowcount
настроен по умолчанию на возврат количества совпадений во всех случаях
Итак, для обоих следующих сценариев rowcount
сообщит 1
.Из - за Rows matched: 1
одна строка изменена с
update
заявление.Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
то же самое
update
оператор выполнен.Query OK, 0 row affected (0.00 sec) Rows matched: 1 Changed: 0 Warnings: 0
То, что говорит Шиплу, конечно, правильно, однако, чтобы ответить на вопрос, во многих случаях вы можете легко сделать совпадающие столбцы равными измененным столбцам, включив условие, что значение отличается в предложении WHERE, т. Е.:
UPDATE table
SET column_to_be_changed = "something different"
WHERE column_to_be_changed != "something different" AND [...your other conditions...]
rowcount
затем вернет количество затронутых строк, поскольку оно равно количеству совпадающих строк.