Как использовать объект fn в Peewee ORM

Я использую Python Peewee ORM для работы с базой данных MySQL. Peewee предоставляет объект под названием «fn», который позволяет вам выполнять определенные типы вызовов к базе данных. Один из тех вызовов, которые я хочу сделать, следующий:

Blocks.select(Blocks, fn.Count(Blocks.height))

Где Blocks — это таблица в моей базе данных, в которой есть столбец с именем height. Этот синтаксис взят прямо из документации Peewee, а именно

User.select(
User, fn.Count(Tweet.id))

находится здесь http://peewee.readthedocs.org/en/latest/peewee/querying.html. Обратите внимание, что у меня также есть следующие строки в верхней части моего файла python.

import peewee
from peewee import *
from peewee import fn

Но когда я запускаю этот код, он не работает и выдает это

<class '__main__.Blocks'> SELECT t1.`height`, t1.`hash`, t1.`time`, t1.`confirmations`, t1.`size`, t1.`version`, t1.`merkleRoot`, t1.`numTX`, t1.`nonce`, t1.`bits`, t1.`difficulty`, t1.`chainwork`, t1.`previousBlockHash`, t1.`nextBlockHash`, Count(t1.`height`) FROM `blocks` AS t1 []

Так что на самом деле это просто распечатка имен столбцов, которые возвращаются запросом выбора.

Какой код peewee я должен написать, чтобы вернуть количество строк в таблице? Я сожалею об использовании peewee, потому что это делает простые запросы невероятно сложными для поиска правильного синтаксиса.


person almel    schedule 09.07.2014    source источник


Ответы (1)


Peewee лениво оценивает запросы, поэтому вам нужно привести его к списку или выполнить итерацию по нему, чтобы получить результаты, например.

query = User.select(User, fn.Count(Tweet.id).alias('num_tweets'))
for user in query:
    print user.username, user.num_tweets
users = list(query)
person coleifer    schedule 10.07.2014
comment
Это оно! Хотя я немного изменил код, чтобы он был topBlockHeight = Blocks.select(Blocks, fn.Count(Blocks.height)alias.('numHeight')).get(). - person almel; 10.07.2014