有没有比在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
for read in testf2():doSomething
,而不是整个语句... 如果它只在一个地方使用,那么你并没有得到太多好处,但如果你在代码中反复执行该查询,则将其放入函数中符合 DRY 的原则。 - Joran Beasleysqlite3
模块的先例,将游标实现为可迭代对象本身,从而允许您执行for meter_row in sel_cur:
操作? - JAB