Python Peewee execute_sql()示例 [英] Python Peewee execute_sql() example

查看:549
本文介绍了Python Peewee execute_sql()示例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将Peewee模块用作项目的ORM。

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

我已经阅读了整个文档,没有清晰的
示例如何处理db.execute_sql()的结果。

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

我跟踪了代码,只能找到db.execute_sql()返回游标。

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

是否有人知道如何处理游标,例如对其进行迭代并从复杂的select语句获取
的结果。

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

更新:我刚刚从peewee文件夹中找到了以下源代码,它应该有助于
我解决此问题。

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返回一个游标。然后,您可以使用db-api 2对其进行迭代:

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

文档: Database.execute_sql

这篇关于Python Peewee execute_sql()示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆