我每天都使用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游标结构,因为它们允许多个游标通过相同的连接来降低连接成本等。离开基地?
答案 0 :(得分:2)
数据库游标受到DBA的辱骂和不信任,通常是有充分理由的。它们通常是性能问题的根源,基于集合的方法几乎总是更好。
例如,“在我的工作场所,我们的SQL Server标准中禁止使用游标。为了使用游标,我们必须证明游标的性能优于以另一种方式处理行。”
为了过度简化,你可以向你紧张的朋友解释一个python游标实际上是其他语言调用记录集或结果集的同义词,并且他们的GUI工具也使用游标/记录集(但不创建游标)在DB!)。