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

时间:2012-05-18 22:16:46

标签: python python-db-api

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

3 个答案:

答案 0 :(得分:17)

游标范例不是特定于Python的,而是databases themselves中常见的数据结构。

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

答案 1 :(得分:6)

正如其他人所提到的,Connection()是与数据库的网络连接,它唯一真正的用途是返回游标。指定了DBApi 2.0的PEP-249没有明确定义连接或游标的确切含义,也没有明确定义每个close()方法必须做什么;只有这样 <module>.connect() 必须返回一个实例 <module>.Connection 那个 <module>.Connection.cursor() 必须返回一个实例 <module>.Cursor ,和 <module>.Cursor.execute() 应该调用提供的语句并返回结果行。特别是,它没有定义一个 <module>.Connection.execute() ,虽然具体实现可以自由地将它们实现为扩展。

根据这些扩展可能不明智,因为这意味着你不会拥有可移植的代码。 DBApi提出了这个两级要求,因为在某些数据库上对连接执行而没有中间对象可能很困难。

答案 2 :(得分:2)

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