在 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 有时游标关闭,有时关闭连接,有时两者都关闭。
我的问题是:
cur.close()
和conn.close()
有区别吗?
- 完成后关闭一个就够了吗(或者我必须关闭两个)?如果可以,哪个更好?
[关闭游标]
如果您关闭游标,您只是将其标记为无效以处理进一步的请求 ("I am done with this")。
因此,在 function/transaction 结束时,您应该继续关闭游标,向数据库提示该事务已完成。
一个好的模式是让游标是短暂的:你从连接对象中得到一个,做你需要的,然后丢弃它。因此关闭是有道理的,您应该在使用它的代码部分的末尾继续使用 cursor.close()
。
我相信(找不到任何参考资料)如果你只是让光标超出范围(函数结束,或者只是del cursor
)你应该得到相同的行为。但是为了良好的编码习惯,您应该明确关闭它。
[连接对象]
当您真正完成数据库时,您应该关闭与它的连接。这意味着 connection.close()
我一直在使用命令 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 有时游标关闭,有时关闭连接,有时两者都关闭。
我的问题是:
cur.close()
和conn.close()
有区别吗?- 完成后关闭一个就够了吗(或者我必须关闭两个)?如果可以,哪个更好?
[关闭游标]
如果您关闭游标,您只是将其标记为无效以处理进一步的请求 ("I am done with this")。
因此,在 function/transaction 结束时,您应该继续关闭游标,向数据库提示该事务已完成。
一个好的模式是让游标是短暂的:你从连接对象中得到一个,做你需要的,然后丢弃它。因此关闭是有道理的,您应该在使用它的代码部分的末尾继续使用 cursor.close()
。
我相信(找不到任何参考资料)如果你只是让光标超出范围(函数结束,或者只是del cursor
)你应该得到相同的行为。但是为了良好的编码习惯,您应该明确关闭它。
[连接对象]
当您真正完成数据库时,您应该关闭与它的连接。这意味着 connection.close()