21

I am using the Peewee module as the ORM for my project.

I read the entire documentation, there is no clear example on how to process the result from db.execute_sql().

I traced the code, only can find db.execute_sql() return back the cursor.

Does anyone knows how to process the cursor, such as iterate over it and get back the result from complex select statement.

Update: I just found the following source code from peewee folder, it should help me to resolve this 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
asked Aug 29, 2013 at 1:36
1
  • What is the type of the object returned? Run sql_execute() and print the result to see it's type. Commented Aug 29, 2013 at 6:22

1 Answer 1

38

Peewee returns a cursor. Then you can use the db-api 2 to iterate over it:

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])

Docs: Database.execute_sql

answered Aug 29, 2013 at 16:47
Sign up to request clarification or add additional context in comments.

3 Comments

is there a fetch that returns a dictionary which maps column name?
@SagarShah It have to be mapped to a Class with given table name and field, how's about some query like show table status from db_name ? It maps to none table
@KJW Try using the cursor.description to grab the column names: col_names = [col[0] for col in cursor.description] res = [dict(zip(col_names, row)) for row in cursor.fetchall()]

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.