如何在Peewee ORM中使用fn Object

时间:2014-07-09 22:19:11

标签: python peewee

我使用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 []

所以这只是打印出select select查询返回的列名。

我必须写什么peewee代码才能返回表中行数的计数?我很遗憾使用peewee,因为它使得简单的查询应该很难找到合适的语法。

1 个答案:

答案 0 :(得分:2)

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)