通过在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