Использование атрибута rowcount
обычно не правильный способ подсчета количества строк. Согласно SQLite документации по rowcount
атрибута
Хотя класс Cursor модуля sqlite3 реализует этот атрибут, собственной поддержку базы данных двигателя для определения «затронутых строк» /»выбранные строки» является изворотливым.
Если вы используете SQL, стандартный способ получить количество строк - использовать функцию COUNT(*)
. В SQLite может быть достигнуто следующим образом:
cursor = conn.cursor()
cursor.execute('SELECT COUNT(*) FROM users')
rowcount = cursor.fetchone()[0]
С PonyORM вы можете сделать подсчет в трех альтернативных способов.
rowcount = select(u for u in User).count() # approach 1
rowcount = User.select().count() # approach 2
rowcount = count(u for u in User) # approach 3
Все строки, указанные выше, должны содержать тот же запрос. Вы можете выбрать линию, которая выглядит наиболее интуитивно понятной для вас.
Если вы хотите считать не все строки, а только конкретные, вы можете добавить условие к запросу. Например, чтобы подсчитать количество продуктов, цена которых превышает 100 вы можете написать любого из следующих строк:
rowcount = select(p for p in Product if p.price > 100).count() # approach 1
rowcount = Product.select(lambda p: p.price > 100).count() # approach 2
rowcount = count(p for p in Product if p.price > 100) # approach 3
Кроме того, вы можете рассчитывать не количество строк, но число различных значений в конкретном колонка. Например, количество отдельных стран-пользователей. Это может быть сделано следующим образом:
user_countries_count = select(count(u.country) for u in User).get()
Надеюсь, я ответил на ваш вопрос.
Непонятно, что вы спрашиваете. – ForceBru
Не могли бы вы описать проблему дальше? Пока неясно, о чем вы спрашиваете. –
Я отредактировал мой вопрос, извините за неудобства. –