39

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

4

3 回答 3

28

游标范式并非特定于 Python,而是数据库本身中的一种常见数据结构。

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

于 2012-05-18T22:37:36.197 回答
8

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

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

于 2012-05-18T22:58:16.297 回答
5

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

于 2012-05-18T22:33:35.403 回答