wwjvtwoex
V2EX  ›  数据库

为什么要关闭游标

  •  
  •   wwjvtwoex · Oct 23, 2017 · 3064 views
    This topic created in 3308 days ago, the information mentioned may be changed or developed.
    使用 Python 操作 SQLite3 / Postgresql / MySQL 关闭连接之前,必须关闭游标吗

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

    哪位高手解释一下
    13 replies  •  2017-10-23 23:59:15 +08:00
    wxyz
    wxyz
    Oct 23, 2017
    1
    看到光标的我表示很方。。。还以为打字的那个光标呢~
    noNOno
    noNOno
    Oct 23, 2017
    2
    你只需要百度一下
    forestyuan
    forestyuan
    Oct 23, 2017
    3
    游标会占用资源,所以用完需要关闭。
    wwjvtwoex
    wwjvtwoex
    OP
    Oct 23, 2017
    4
    @wxyz 已经改了
    forestyuan
    forestyuan
    Oct 23, 2017❤️1
    5
    在关闭连接之前关闭游标是一个 good practice
    wwjvtwoex
    wwjvtwoex
    OP
    Oct 23, 2017
    6
    @forestyuan 如果立即断开数据库连接,是否就不用关闭了
    yulitian888
    yulitian888
    Oct 23, 2017
    7
    把游标视为一个指针,琢磨琢磨,指针不释放是不是很容易内存溢出哈? DBMS 可不是高级语言那种自带垃圾回收机制的哦
    yulitian888
    yulitian888
    Oct 23, 2017
    8
    @wwjvtwoex #6 接上条,直接断开数据库连接套用到指针上,就该叫做“野指针”喽,嚯嚯
    jy02201949
    jy02201949
    Oct 23, 2017
    9
    这东西把数据读到内存里跑所以很快啊,不关闭不就一直占着内存吗
    noNOno
    noNOno
    Oct 23, 2017
    10
    会话结束会自动清理游标.
    但如果用连接池,会话不结束就会导致资源不释放
    forestyuan
    forestyuan
    Oct 23, 2017
    11
    @wwjvtwoex 有些数据库会在连接断开以后,自动把游标清理掉,但是你要查相关文档,确定有这个特性才行。
    但是,万一哪天你们要换一个不支持这个特性的数据库呢?所以跟着 good practice 做才是最好的
    afpro
    afpro
    Oct 23, 2017❤️1
    12
    就好比你 malloc 了一堆东西 如果进程马上就退出了 你可以不 free 但是不能那么写代码……
    oswuhan
    oswuhan
    Oct 23, 2017❤️1
    13
    “你上完公厕,如果不把门口的‘厕所有人’的标识拿掉,别人就不会使用这间厕所”。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   918 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 288ms · UTC 20:58 · PVG 04:58 · LAX 12:58 · JFK 15:58
    ♥ Do have faith in what you're doing.