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
Peewee is a Python ORM (Object-Relational Mapping) library which supports SQLite, MySQL, PostgreSQL and Cockroach databases. This tutorial will help you to understand how to insert a new record, delete a record, create an index, etc., with the help of Peewee.
Peewee is a simple and small ORM. It has few (but expressive) concepts, making it easy to learn and intuitive to use. a small, expressive ORM. python 2.7+ and 3.4+ (developed with 3.6) supports sqlite, mysql, postgresql and cockroachdb.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With