我很困惑为什么python需要游标对象。我知道jdbc,那里的数据库连接非常直观但是在python中我与游标对象混淆了。另外,我怀疑cursor.close()和connection.close()函数在资源释放方面有什么区别。
答案 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对象是查询结果集上的迭代器。完成该结果集后关闭它们。