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

J0A*_*NMM 5 python sqlite cursor

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

import sqlite3

conn = sqlite3.connect('mydb')
cur = conn.cursor()
# whatever actions in the database
cur.close()
Run Code Online (Sandbox Code Playgroud)

但是,我只是在某些情况下看到了以下方法:

import sqlite3

conn = sqlite3.connect('mydb')
cur = conn.cursor()
# whatever actions in the database
cur.close()
conn.close()
Run Code Online (Sandbox Code Playgroud)

在官方文档中,有时光标关闭,有时连接关闭,有时两者兼而有之。

我的问题是:

  1. 有什么区别cur.close()conn.close()
  2. 完成后关闭一个就足够了吗(或者我必须关闭两个)?如果是这样,哪一种更可取?

小智 5

[关于关闭游标]

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

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

一个好的模式是使游标短暂存在:您从连接对象中获取一个游标,执行您需要的操作,然后丢弃它。因此,关闭是有意义的,您应该cursor.close()在使用它的代码部分的末尾继续使用。

相信(找不到任何引用),如果您只是让光标超出范围(函数结束,或简单地del cursor),您应该得到相同的行为。但为了良好的编码实践,您应该明确关闭它。

[连接对象]

当您实际使用完数据库后,您应该关闭与它的连接。这意味着connection.close()