Python peewee 遍历 SelectQuery

Python peewee iterate over SelectQuery

我正在尝试使用 peewee 在 Python 的嵌套循环中遍历一些数据库行。以下是我如何连接到数据库并定义模型:

from peewee import *
from playhouse.shortcuts import *
db = MySQLDatabase("testdb", **{"host": "localhost", "user": "root", "passwd": ""})

class UserService(Model):
    # a primary key of 'id' is implicitly defined
    service = CharField()

    class Meta:
        db_table = "results"
        database = db

db.connect()

unique_service_query = UserService.select(UserService.service).group_by(UserService.service)

我正在尝试这样的事情:

for outer_service in unique_service_query:
    for inner_service in unique_service_query:
        print outer_service.service,inner_service.service

这在外循环中只产生了一项。看起来 peewee 中的迭代器不像标准列表对象那样工作。 Where/how 我可以重置迭代器还是 return 一个列表?

我像您一样尝试了一个嵌套循环,还发现即使查询有多个结果,外循环也只进行了一次迭代。我不知道究竟是什么导致了这个 peewee 查询结果,但是如果我首先将查询结果转换为这样的列表,我得到了预期的结果

list(unique_service_query)

所以你的代码会变成

results = list(unique_service_query)

for outer_service in results:
    for inner_service in results:
        print outer_service.service,inner_service.service

你在 return 中得到一个对象,所以使用类似这样的东西

for outer_service in unique_service_query:
        print(outer_service.your_field_name)