Python pyodbc游标与数据库游标

时间:2017-02-17 00:10:46

标签: python mysql sql-server database pyodbc

我每天都使用python,并且非常重视数据库工作。

使用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来处理数据库的新同事开始感到恐慌。设置它们的是cursor关键字。我理解游标对于DB来说是一个很大的禁忌,因为它们表明逻辑没有建立在集合论中,倾向于将主机推入低/零级并行化和RBAR类型操作,但我不相信ODBC游标我'当我们使用SQL Server工程和管理帽时,上面的声明与我们想到的游标相同。

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

如果我不对,请告诉我并告诉我如何更有效地与我的数据库进行交互。

为什么你不能直接从像

这样的连接中执行
connection_hostname.execute(command_hostname)

我觉得拥有ODBC游标结构,因为它们允许多个游标通过相同的连接来降低连接成本等。离开基地?

1 个答案:

答案 0 :(得分:2)

数据库游标受到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 Server标准中禁止使用游标。为了使用游标,我们必须证明游标的性能优于以另一种方式处理行。”

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

difference between cursor and connection objects