我正在使用 Peewee 模块作为我的项目的 ORM。
我阅读了整个文档,没有关于如何处理 db.execute_sql() 的结果的明确示例。
我跟踪了代码,只能找到 db.execute_sql() 返回光标。
有谁知道如何处理游标,例如遍历它并从复杂的 select 语句中取回结果。
更新:我刚刚从 peewee 文件夹中找到了以下源代码,它应该可以帮助我解决这个问题。
类 QueryResultWrapper(对象):
"""
为原始查询的结果提供一个迭代器,另外还做
两件事情:
- 将数据库中的行转换为 python 表示
- 确保多次迭代不会导致多次查询
"""
def __init__(self, model, cursor, meta=None):
self.model = 模型
self.cursor = 光标
自我.__ct = 0
自我.__idx = 0
self._result_cache = []
self._populated = False
self._initialized = False
如果元不是无:
self.column_meta,self.join_meta = 元
别的:
self.column_meta = self.join_meta = 无
def __iter__(self):
自我.__idx = 0
如果不是 self._populated:
回归自我
别的:
返回迭代器(self._result_cache)
def process_row(自我,行):
返回行
定义迭代(自我):
行 = self.cursor.fetchone()
如果不是行:
self._populated = True
提高 StopIteration
elif 不是 self._initialized:
self.initialize(self.cursor.description)
self._initialized = True
返回 self.process_row(row)
定义迭代器(自我):
而真:
产生 self.iterate()
定义下一个(自我):
如果 self.__idx self.__ct):
尝试:
self.next()
除了停止迭代:
休息