17

プロジェクトの 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 を除く:
                壊す
4

1 に答える 1