プロジェクトのORMとしてPeeweeモジュールを使用しています。
ドキュメント全体を読みましたが、db.execute_sql()からの結果を処理する方法に関する明確な例はありません。
コードをトレースしましたが、db.execute_sql()がカーソルを返すことしかわかりません。
カーソルを繰り返し処理して複雑なselectステートメントから結果を取得するなど、カーソルを処理する方法を知っている人はいますか。
更新:peeweeフォルダーから次のソースコードを見つけました。この問題の解決に役立つはずです。
class QueryResultWrapper(object): "" " 生のクエリの結果に対する反復子を提供し、さらに 2つのことを実行します: -データベースの行をpython表現 に変換します-複数の反復で複数のクエリが発生しないようにします "" " def __init __( self、model、cursor、meta = None): self.model = model self.cursor = cursor self .__ ct = 0 self .__ idx = 0 self._result_cache = [] self._populated = False self._initialized = False metaがNoneでない場合: self.column_meta、self.join_meta = meta else: self.column_meta = self.join_meta = None def __iter __(self): self .__ idx = 0 self._populated: return self else: return iter(self._result_cache) def process_row(self、row): return row def iterate(self): row = self.cursor.fetchone() 行でない場合: self._populated = True raise StopIteration Elif not self._initialized: self.initialize(self.cursor.description) self._initialized = True return self.process_row(row) def iterator(self): while True: yield self.iterate() def next(self): if self .__ idx self .__ ct): try: self.next() ただしStopIteration: break
Peeweeはカーソルを返します。次に、db-api2を使用して反復できます。
cursor = db.execute_sql('select * from tweets;')
for row in cursor.fetchall():
print(row)
cursor = db.execute_sql('select count(*) from tweets;')
res = cursor.fetchone()
print('Total: ', res[0])
ドキュメント: Database.execute_sql