2013-08-29 7 views
6

私はプロジェクトのORMとしてPeeweeモジュールを使用しています。Python Peewee execute_sql()例

私は文書全体を読みましたが、db.execute_sql()の結果を処理する方法については、明確な の例はありません。

私はコードをトレースしただけで、db.execute_sql()がカーソルを戻すことができます。

誰かがそれを繰り返し処理するなど、カーソルを処理する方法を知っていて、 を複雑なselect文から戻します。

アップデート:私はちょうどpeeweeフォルダから次のソースコードを見つけました。それは 私がこの問題を解決するのに役立ちます。

 
class QueryResultWrapper(object): 
    """ 
    Provides an iterator over the results of a raw Query, additionally doing 
    two things: 
    - converts rows from the database into python representations 
    - ensures that multiple iterations do not result in multiple queries 
    """ 
    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 

     if meta is not None: 
      self.column_meta, self.join_meta = meta 
     else: 
      self.column_meta = self.join_meta = None 

    def __iter__(self): 
     self.__idx = 0 

     if not self._populated: 
      return self 
     else: 
      return iter(self._result_cache) 

    def process_row(self, row): 
     return row 

    def iterate(self): 
     row = self.cursor.fetchone() 
     if not row: 
      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() 
      except StopIteration: 
       break 
+0

返されるオブジェクトのタイプは? 'sql_execute()'を実行し、結果を出力してその型を見ます。 – xbonez

答えて

16

Peeweeがカーソルを返します。次に、db-api 2を使用して反復処理を行うことができます。

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] 
+2

は、列名をマッピングする辞書を返すフェッチはありますか? – KJW

+2

@KJW http://docs.peewee-orm.com/en/latest/peewee/api.html#RawQuery –

関連する問題