Python pyodbc游标vs数据库游标

问题描述:

我每天都在使用python,主要关注数据库工作。Python pyodbc游标vs数据库游标

使用pyodbc我的标准起点是一样的东西

connection_hostname = pyodbc.connect('connection_string') 
cursor_hostname = connection_hostname.cursor() 
command_hostname = 'select * from everything_forever;' 
cursor_hostname.execute('command_hostname') 

如果我需要想重用,而不是创建一个新的光标的光标另一个查询,我可以存储结果,从像这样先查询设置:

results_from_query = cursor_hostname.fetchall() 

然后继续。

到目前为止,这种方法对我来说效果很好。

最近,我改变了工作,当我演示上述技术时,一些通常使用GUI来处理数据库的新同事开始恐慌。什么设置它们是游标关键字。我明白游标对数据库来说是一个很大的禁忌,因为它们表明在集合论中没有建立逻辑,倾向于将主机推入低/零水平的并行化和RBAR类型的操作,但是我不相信ODBC游标I'上面的声明与我们在SQL Server工程和管理工具上使用的游标相同。

有人可以解释这些ODBC游标和SQL Server类型游标(假设我是正确的,他们是不同的)之间的区别?

如果我不正确,请启发我,告诉我如何更有效地与我的数据库交互。

为什么不能你只是直接从像有ODBC游标结构,因为他们有事情做与通过相同的连接,使多个游标来降低连接成本与此类似的

connection_hostname.execute(command_hostname) 

我觉得一个连接上执行。离开基地?

数据库游标受到DBA的唾骂和不信任,通常是有充分理由的。它们往往是性能问题的来源,而基于集合的方法几乎总是更好。

http://www.databasejournal.com/features/mssql/article.php/3896206/What-Every-DBA-Ought-to-Know-About-SQL-Server-Cursors-and-Their-Alternatives.htm例如说:

“在我工作的地方,光标在我们的SQL服务器的标准取缔,以使用游标,我们必须证明,光标的性能比处理越好。以另一种方式排列“

为了简化,您可能会向紧张的朋友解释,python游标实际上是其他语言称为记录集或结果集的同义词,并且它们的GUI工具也使用游标/记录集(但不在DB上创建游标!)。

difference between cursor and connection objects