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

Posted

技术标签:

【中文标题】在 SQLite 中关闭游标或连接有啥区别吗?【英文标题】:Is there any difference between closing a cursor or a connection in SQLite?在 SQLite 中关闭游标或连接有什么区别吗? 【发布时间】:2017-01-29 16:13:21 【问题描述】:

在我完成数据库后,我一直使用命令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()有什么区别吗? 完成后关闭一个是否足够(或者我必须同时关闭两个)?如果有,哪一个更可取?

【问题讨论】:

参考***.com/questions/5504340/… 【参考方案1】:

[关闭游标]

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

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

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

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

[连接对象]

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

【讨论】:

以上是关于在 SQLite 中关闭游标或连接有啥区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

是否必须在PLSQL块中关闭游标

有啥方法可以使用 c# 在 Windows 中关闭“互联网”?

检查在java中关闭的游标

mfc中关闭一个线程时,有的用return 1有的return0,两者有啥区别呢?

Websocket 连接不会在 FireFox 中关闭

检测在 grpc 服务器中关闭的客户端连接