yield而不是True:在python中使用yield

时间:2017-08-18 17:11:09

标签: python sqlite generator yield coroutine

我想构建一个辅助函数来从sqlite获取查询结果,用于与另一个数据库的结果进行比较。

我希望用户拥有一个简单的界面,在那里他用他的查询调用函数并获得结果,而无需任何其他准备。

我最终写了两个函数:

import sqlite3 
.
.
def sqlite_query_executor(query):
    conn=sqlite3.connect(':memory:')
    cur=conn.cursor()

    yield cur.execute(query).fetchall()[0][0]

那个意图由用户调用:

def query_sqlite(query):

    return next(sqlite_query_executor(query))

在修补第一个函数时,我最初编写了另一个版本,其结尾略有不同:

def sqlite_query_executor(query):
    conn=sqlite3.connect()
    cur=conn.cursor()

    while True:
        yield cur.execute(query).fetchall()[0][0]

两个版本似乎运作良好,但我正在努力解决这些问题。

有人可能会对这种差异有所了解吗?这种用例的正确模式是什么?

1 个答案:

答案 0 :(得分:0)

fetchall()做了太多工作,应该用 fetchone()替换:

def sqlite_query_executor(query):
    conn=sqlite3.connect()
    cur=conn.cursor()

    while True:
        yield cur.execute(query).fetchone()[0]