2013-08-29 21 views
6

Sto utilizzando il modulo Peewee come ORM per il mio progetto.Python Peewee execute_sql() esempio

Ho letto l'intera documentazione, non è chiaro l'esempio su come elaborare il risultato da db.execute_sql().

Ho rintracciato il codice, solo in grado di trovare db.execute_sql() indietro il cursore.

Qualcuno sa come elaborare il cursore, come iterare su di esso e ottenere indietro il risultato dalla complessa istruzione di selezione.

Aggiornamento: Ho appena trovato il seguente codice sorgente dalla cartella peewee, dovrebbe aiutare lo me per risolvere questo problema.

 
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

Qual è il tipo di oggetto restituito? Esegui 'sql_execute()' e stampa il risultato per vedere il suo tipo. – xbonez

risposta

16

Peewee restituisce un cursore. Quindi è possibile utilizzare il db-api 2 per iterare su di esso:

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

c'è un recupero che restituisce un dizionario che mappa il nome della colonna? – KJW

+2

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

Problemi correlati