在SQLite中,关闭游标和关闭连接有什么区别吗?

7

在我完成数据库操作后,我一直使用命令cur.close()

import sqlite3

conn = sqlite3.connect('mydb')
cur = conn.cursor()
# whatever actions in the database
cur.close()

然而,我在一些情况下看到了以下方法:

import sqlite3

conn = sqlite3.connect('mydb')
cur = conn.cursor()
# whatever actions in the database
cur.close()
conn.close()

在官方文档中,有时关闭游标,有时关闭连接,有时两者都关闭。

我的问题是:

  1. cur.close()conn.close()之间有什么区别吗?
  2. 完成后关闭其中一个是否足够(还是必须同时关闭两者)?如果只需要关闭一个,哪个更可取?

1
请参考以下链接:https://dev59.com/vG035IYBdhLWcg3wTuFu - Harsha Biyani
1个回答

5

[关闭游标]

如果您关闭游标,您只是将其标记为无效以处理进一步的请求(“我已完成此操作”)。

因此,在函数/事务的末尾,您应该继续关闭游标,向数据库提示该事务已完成。

一个好的模式是使游标具有短生命周期:您从连接对象获取一个游标,完成所需操作后立即丢弃它。 因此,关闭游标是有意义的,并且您应该在使用游标的代码段的末尾继续使用cursor.close()

我相信(找不到任何参考资料),如果您只是让游标超出范围(函数结尾或简单地del cursor),您应该获得相同的行为。 但出于良好的编码实践,您应该明确关闭它。

[连接对象]

当您实际上完成了与数据库的交互时,应关闭与之的连接。也就是说,connection.close()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接