2015-02-19 9 views
3

Я использую этот Python ORM, чтобы управлять своей базой данных в моем приложении: ponyorm.comКак сделать rowcount в ponyorm? Python

Я просто изменил атрибут в моем столе, я хотел бы сделать сверку мне, что он возвращает 1 для ИСТИНА и 0 для FALSE ,

Ex: Используя sqlite3 только я хотел бы сделать так:

user = conn.execute('SELECT * FROM users') 

count = user.rowcount 

if count == 1: 
    print('Return %d lines' %count) 
else: 
    print('Bad....return %d lines', %count) 
+2

Непонятно, что вы спрашиваете. – ForceBru

+0

Не могли бы вы описать проблему дальше? Пока неясно, о чем вы спрашиваете. –

+0

Я отредактировал мой вопрос, извините за неудобства. –

ответ

6

Использование атрибута 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() 

Надеюсь, я ответил на ваш вопрос.

+0

Большое спасибо –

+0

Если вы удовлетворены ответом, можете ли вы принять его как правильный? ;) –