在 SQLite 中关闭游标或连接之间有什么区别吗?

Is there any difference between closing a cursor or a connection in SQLite?

我一直在使用命令 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()

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

我的问题是:

  1. cur.close()conn.close()有区别吗?
  2. 完成后关闭一个就够了吗(或者我必须关闭两个)?如果可以,哪个更好?

[关闭游标]

如果您关闭游标,您只是将其标记为无效以处理进一步的请求 ("I am done with this")。

因此,在 function/transaction 结束时,您应该继续关闭游标,向数据库提示该事务已完成。

一个好的模式是让游标是短暂的:你从连接对象中得到一个,做你需要的,然后丢弃它。因此关闭是有道理的,您应该在使用它的代码部分的末尾继续使用 cursor.close()

相信(找不到任何参考资料)如果你只是让光标超出范围(函数结束,或者只是del cursor)你应该得到相同的行为。但是为了良好的编码习惯,您应该明确关闭它。

[连接对象]

当您真正完成数据库时,您应该关闭与它的连接。这意味着 connection.close()