pyodbc 游标重用

2 投票
1 回答
7467 浏览
提问于 2025-04-17 10:33

我在我的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()

之后,rowsrows2会指向同一个东西(对象)。

编辑:来自pyodbc网站的有用信息

因为这个方法会把所有行都读入内存,所以如果行数很多就不应该使用。可以考虑逐行处理。不过,这个方法在释放游标后可以让你在处理结果行之前执行第二个查询,这点很有用。

游标信息

1 个回答

2

我觉得你最后说的有点不对,因为.fetchall()这个方法会返回一个新的列表,里面包含了游标查询返回的所有行数据。之后你可以继续使用这个游标。(不过在考虑重用游标之前,我建议先测试一下新建游标的开销。)[嗯,我不确定这是否真的准确,但对于兼容dbapi的sqlite3绑定来说是这样的]

撰写回答