2017-08-18 79 views
1

我想建立一個輔助函數來得到SQLite的查詢結果,用來與從另一個數據庫的結果進行比較。產量:產量用法在Python

我希望用戶有一個簡單的界面,在那裏,他呼籲他的查詢功能,並得到一個結果,沒有任何其他的準備。

我最後寫兩個功能:

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

爲什麼你在所有這些'yield'和'next'東西以及'fetchall'時都不想要*全部*? – user2357112

回答

0

使用fetchall()做太多的工作,並應與fetchone(更換)

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

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