2012-01-18 43 views
2

我从我的python代码使用pyodbc连接到SQL Server对我的数据库进行多个查询。pyodbc游标重用

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网站

由于该读所有的行到内存实用信息,它不应该,如果有很多行使用。考虑重复遍历行。但是,释放Cursor非常有用,因此您可以在处理结果行之前执行第二个查询。

cursor info

+0

我是有这个问题。解决方案究竟是什么? – 2018-01-12 14:27:08

回答

1

我认为你最后的说法是错误的,因为.fetchall()返回一个包含光标查询,之后可能会重新使用游标返回的所有行一个新的列表。 (但我想测试一下新的游标的成本,然后再考虑重新使用它们。)[好吧,我不知道这是否真的如此,但是它适用于兼容dbapi的sqlite3绑定]

+0

看起来你是对的。我使用pyodbc网站的信息编辑了我的问题。谢谢! – 2012-01-18 19:57:01