2013-08-29 13 views
6

Używam modułu Peewee jako ORM dla mojego projektu.Python Peewee execute_sql() przykład

Przeczytałem całą dokumentację, nie ma jasnego przykładu, jak przetworzyć wynik z db.execute_sql().

I śledził kod, tylko można znaleźć db.execute_sql() wróć kursor.

Czy ktoś wie, jak przetwarzać kursor, na przykład iterować nad nim i uzyskać z powrotem wynik złożonej instrukcji select.

Aktualizacja: Właśnie znalazłem następujący kod źródłowy z folderu peewee, powinno to pomóc mi rozwiązać ten problem.

 
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

Jaki jest typ zwróconego obiektu? Uruchom 'sql_execute()' i wydrukuj wynik, aby zobaczyć jego typ. – xbonez

Odpowiedz

16

Peewee zwraca kursor. Następnie możesz użyć db-api 2 do iteracji:

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

jest tam pobranie, które zwraca słownik, który mapuje nazwę kolumny? – KJW

+2

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

Powiązane problemy