Python pyodbc游标与数据库游标

zen*_*inc 6 python mysql database sql-server 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')
Run Code Online (Sandbox Code Playgroud)

如果我需要将光标重用于另一个查询而不是创建一个新的游标,我可以存储第一个查询的结果集,如下所示:

results_from_query = cursor_hostname.fetchall()
Run Code Online (Sandbox Code Playgroud)

然后继续前进.

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

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

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

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

为什么你不能直接从像这样的连接执行

connection_hostname.execute(command_hostname)
Run Code Online (Sandbox Code Playgroud)

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

Ian*_*wan 6

数据库游标受到 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 工具也在使用游标/记录集(但不是在数据库上创建游标) !)。

游标和连接对象之间的区别