Python Peewee execute_sql() пример
Я использую модуль Peewee в качестве ORM для моего проекта.
Я прочитал всю документацию, нет четкого примера того, как обработать результат из db.execute_sql().
Я проследил код, только могу найти db.execute_sql(), возвращающий назад курсор.
Кто-нибудь знает, как обрабатывать курсор, например перебирать его и возвращать результат из сложного оператора select.
Обновление: я только что нашел следующий исходный код из папки peewee, это должно помочь мне решить эту проблему.
Класс QueryResultWrapper(объект): """ Предоставляет итератор для результатов необработанного запроса, дополнительно делая две вещи: - преобразует строки из базы данных в представления Python - гарантирует, что несколько итераций не приведут к нескольким запросам """ def __init__(self, model, cursor, meta=None): self.model = модель self.cursor = курсор self.__ct = 0 self.__idx = 0 self._result_cache = [] self._populated = False self._initialized = False если мета не None: self.column_meta, self.join_meta = meta еще: self.column_meta = self.join_meta = Нет def __iter__(self): self.__idx = 0 если не self._populated: вернуть себя еще: вернуть iter(self._result_cache) def process_row(self, row): возвратный ряд def iterate (self): row = self.cursor.fetchone () если не строка: self._populated = True поднять стоп-изменение elif not self._initialized: self.initialize(self.cursor.description) self._initialized = True вернуть self.process_row (row) def iterator (self): пока верно: yield self.iterate() def next(self): если self.__idx self.__ct): пытаться: self.next() кроме стоп-изменения: перерыв
1 ответ
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]