在 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 中关闭游标或连接有啥区别吗?的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以使用 c# 在 Windows 中关闭“互联网”?