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]
Другие вопросы по тегам