Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 光标和连接对象之间的区别_Python_Python Db Api - Fatal编程技术网

Python 光标和连接对象之间的区别

Python 光标和连接对象之间的区别,python,python-db-api,Python,Python Db Api,我对python为什么需要游标对象感到困惑。我知道jdbc,那里的数据库连接非常直观,但在python中,我对游标对象感到困惑。另外,我怀疑cursor.close()和connection.close()函数在资源释放方面有什么区别。连接对象是您与数据库的连接,当您与数据库全部对话完毕后,请关闭该连接。游标对象是查询结果集的迭代器。当您完成该结果集时,请关闭它们。游标范例不是Python特有的,而是Python中常见的数据结构 根据底层实现的不同,可能会生成多个共享同一数据库连接的游标。关闭游

我对python为什么需要游标对象感到困惑。我知道jdbc,那里的数据库连接非常直观,但在python中,我对游标对象感到困惑。另外,我怀疑cursor.close()和connection.close()函数在资源释放方面有什么区别。

连接对象是您与数据库的连接,当您与数据库全部对话完毕后,请关闭该连接。游标对象是查询结果集的迭代器。当您完成该结果集时,请关闭它们。

游标范例不是Python特有的,而是Python中常见的数据结构


根据底层实现的不同,可能会生成多个共享同一数据库连接的游标。关闭游标将释放与查询相关的资源,包括从未从数据库中获取的任何结果(或已获取但未使用的结果),但不会消除与数据库本身的连接,因此您可以在同一数据库上获取新游标,而无需再次验证。

如其他人所述,连接()是与数据库的网络连接,它唯一真正的用途是返回游标,如果指定了DBApi 2.0,则没有明确定义连接或游标的确切含义,也没有明确定义每个连接或游标上的
close()
方法必须执行的操作;只有那个
.connect()
必须返回的实例
.Connection
那个
.Connection.cursor()
必须返回的实例
.Cursor
,及
.Cursor.execute()
应调用提供的语句并返回结果行。特别是,它没有定义
.Connection.execute()
,尽管特定实现可以作为扩展自由实现


不过,依赖这些扩展可能是不明智的,因为这意味着您将没有可移植的代码。DBApi提出了这一两级要求,因为在某些数据库上,在没有中间对象的连接上执行execute可能很困难。

我怀疑它是迭代器,因为有一个命令作为execute(sql_字符串)执行sql字符串。结果集的任何迭代器都有这样的功能是没有意义的。您是对的,但是游标不仅是客户端上的一个结构,而且也是服务器上的一个结构。它有助于利用准备好的SQL语句,执行它们,并在它们执行后迭代其结果。我们可以同时使用两个游标吗。如果是,请提及并发问题所有这些细节都隐藏在“取决于底层实现”中。根据维基百科,您必须阅读相应数据库驱动器的文档:“在计算机科学中,数据库游标是一种控制结构,可以遍历数据库中的记录。游标与遍历一起促进后续处理,例如检索、添加和删除数据库记录。”. Python实现游标的方式与该描述不一致——如果它们仅仅是迭代器,它们就不会负责执行SQL语句。这不是python特有的吗?还有什么值得解释的吗?@skyking:这句话的最后一句回答了你的问题,游标不仅仅用于遍历,它还促进了实际需要执行查询的操作:检索、添加和删除。这就是为什么游标本身既用于执行查询,也用于处理查询结果,而不是具有单独的对象或抽象。@Toote我认为维基百科并不清楚游标的“标准”行为是能够使用它发出新查询,而不仅仅是处理查询结果。本文的下一句将其与迭代器进行比较。此外,MySQL和postgres链接看起来只是一种处理结果而不是发出查询的方法。另外,Android API似乎不包括从游标发出新查询,Berkley DB API也不包括。在我看来,python的工作方式似乎有所不同,这使得它有点特定于python。