通過在while循環中調用.fetchone()
來編寫以下生成器函數是否有優勢?如果是這樣,那麼這個優勢會是什麼?數據庫訪問生成器函數是否有優勢?
謝謝。
def testf2():
db = connectToMysqlDB(None)
sql_statement = " ".join([
"select d.* ",
"from dr_snapshot d ",
"order by d.PremiseID asc, d.last_read asc; "])
sel_cur = db.cursor()
rc = sel_cur.execute(sql_statement)
loop_ok = True
while loop_ok:
meter_row = sel_cur.fetchone()
if meter_row:
yield meter_row
else:
loop_ok = False
yield None
for read_val in testf2():
print(read_val)
#Perform something useful other than print.
('610159000', 6, datetime.datetime(2012, 7, 25, 23, 0), 431900L, 80598726L)
('610160000', 6, datetime.datetime(2012, 7, 25, 23, 0), 101200L, 80581200L)
None
可能只是說它在testf2():doSomething'中讀取的時間短於完成整個語句的時間......如果它只用於一個地方而不是您真的得到很多,但如果您正在重複執行該查詢在您的代碼然後把它放在一個函數更符合DRY – 2012-07-27 16:08:19
mySQL的python包裝是否不遵循'sqlite3'模塊的領導和實現光標作爲iterables本身,允許您在'se__cur:'中執行'meter_row? – JAB 2012-07-27 17:17:13
@JAB謝謝。這是一個好點。 – octopusgrabbus 2012-07-27 18:20:27