pyodbc 游标重用
我在我的Python代码中多次查询数据库,使用pyodbc来连接SQL Server。
cursor = connection.connect(connection_string)
qry1 = "Select * FROM Table1"
rows = cursor.execute(qry1).fetchall()
for row in rows:
qry2 = "Select * FROM Table2"
rows2 = cursor.execute(qry2).fetchall()
for row2 in rows2:
print row2
这个方法有效,两个查询都顺利完成了。
我想知道,为什么我可以重复使用这个游标对象呢?
我本以为当我运行
rows2 = cursor.execute(qry2).fetchall()
之后,rows
和rows2
会指向同一个东西(对象)。
编辑:来自pyodbc网站的有用信息
因为这个方法会把所有行都读入内存,所以如果行数很多就不应该使用。可以考虑逐行处理。不过,这个方法在释放游标后可以让你在处理结果行之前执行第二个查询,这点很有用。
1 个回答
2
我觉得你最后说的有点不对,因为.fetchall()
这个方法会返回一个新的列表,里面包含了游标查询返回的所有行数据。之后你可以继续使用这个游标。(不过在考虑重用游标之前,我建议先测试一下新建游标的开销。)[嗯,我不确定这是否真的准确,但对于兼容dbapi的sqlite3绑定来说是这样的]