为什么要关闭游标

2017-10-23 16:08:53 +08:00
 wwjvtwoex
使用 Python 操作 SQLite3 / Postgresql / MySQL 关闭连接之前,必须关闭游标吗

在 SO 中没人回答 https://stackoverflow.com/questions/43927799/why-close-a-cursor-for-sqlite3-in-python
本站中也没人回答 https://www.v2ex.com/t/93964

哪位高手解释一下
2007 次点击
所在节点    数据库
13 条回复
wxyz
2017-10-23 16:13:02 +08:00
看到光标的我表示很方。。。还以为打字的那个光标呢~
noNOno
2017-10-23 16:13:48 +08:00
你只需要百度一下
forestyuan
2017-10-23 16:14:57 +08:00
游标会占用资源,所以用完需要关闭。
wwjvtwoex
2017-10-23 16:15:59 +08:00
@wxyz 已经改了
forestyuan
2017-10-23 16:16:34 +08:00
在关闭连接之前关闭游标是一个 good practice
wwjvtwoex
2017-10-23 16:21:19 +08:00
@forestyuan 如果立即断开数据库连接,是否就不用关闭了
yulitian888
2017-10-23 16:32:13 +08:00
把游标视为一个指针,琢磨琢磨,指针不释放是不是很容易内存溢出哈? DBMS 可不是高级语言那种自带垃圾回收机制的哦
yulitian888
2017-10-23 16:33:42 +08:00
@wwjvtwoex #6 接上条,直接断开数据库连接套用到指针上,就该叫做“野指针”喽,嚯嚯
jy02201949
2017-10-23 16:38:01 +08:00
这东西把数据读到内存里跑所以很快啊,不关闭不就一直占着内存吗
noNOno
2017-10-23 16:40:54 +08:00
会话结束会自动清理游标.
但如果用连接池,会话不结束就会导致资源不释放
forestyuan
2017-10-23 17:01:24 +08:00
@wwjvtwoex 有些数据库会在连接断开以后,自动把游标清理掉,但是你要查相关文档,确定有这个特性才行。
但是,万一哪天你们要换一个不支持这个特性的数据库呢?所以跟着 good practice 做才是最好的
afpro
2017-10-23 20:43:23 +08:00
就好比你 malloc 了一堆东西 如果进程马上就退出了 你可以不 free 但是不能那么写代码……
oswuhan
2017-10-23 23:59:15 +08:00
“你上完公厕,如果不把门口的‘厕所有人’的标识拿掉,别人就不会使用这间厕所”。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/399953

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX