プロジェクトの ORM として Peewee モジュールを使用しています。
ドキュメント全体を読みましたが、db.execute_sql() からの結果を処理する方法に関する明確な例はありません。
私はコードをトレースしましたが、 db.execute_sql() がカーソルを返すことしかわかりません。
カーソルを反復処理して複雑な選択ステートメントから結果を取得するなど、カーソルを処理する方法を知っている人はいますか?
更新: peewee フォルダーから次のソース コードを見つけました。この問題の解決に役立つはずです。
クラス QueryResultWrapper(オブジェクト): """ 生のクエリの結果に対する反復子を提供し、さらに次のことを行います 2つのこと: - データベースからの行を Python 表現に変換します - 複数の反復によって複数のクエリが発生しないようにする """ def __init__(自己、モデル、カーソル、メタ = なし): self.model = モデル self.cursor = カーソル self.__ct = 0 self.__idx = 0 self._result_cache = [] self._populated = False self._initialized = False メタが None でない場合: self.column_meta、self.join_meta = メタ そうしないと: self.column_meta = self.join_meta = なし def __iter__(自己): self.__idx = 0 self._populated でない場合: 自分を返す そうしないと: return iter(self._result_cache) def process_row (自己、行): 行を返す デフ反復(自己): 行 = self.cursor.fetchone() 行でない場合: self._populated = True StopIterationを上げる elif は self._initialized ではありません: self.initialize(self.cursor.description) self._initialized = True return self.process_row(行) デフイテレータ(自己): True の間: yield self.iterate() デフネクスト(セルフ): if self.__idx self.__ct): 試す: セルフ.ネクスト() StopIteration を除く: 壊す