当前位置:  开发笔记 > 编程语言 > 正文

在Python中使用sqlite是否需要关闭游标?

如何解决《在Python中使用sqlite是否需要关闭游标?》经验,为你挑选了5个好方法。

这是场景.在您的函数中,您使用游标执行语句,但其中一个失败并抛出异常.在关闭正在使用的光标之前,您的程序退出该函数.光标是否会占用空间?我必须关闭光标吗?

另外,Python文档中有一个游标使用示例,并说:"如果完成游标,我们也可以关闭游标." 关键字是"可以",而不是"必须".这是什么意思呢?



1> Michael Ekst..:

这可能是一个好主意(虽然它与sqlite无关,但不知道那里,但它会使你的代码更加便携).此外,使用最近的Python(2.5+),它很容易:

from __future__ import with_statement
from contextlib import closing

with closing(db.cursor()) as cursor:
    # do some stuff



2> Ben James..:

你没有义务打电话close(); 它可以像任何其他对象一样被垃圾收集.

但即使等待垃圾收集听起来没问题,我认为仍然可以确保数据库游标等资源无论是否存在异常都是好的方式.



3> Simon A. Eug..:

我还没有看到对sqlite3.Cursor.close()手术有任何影响.

关闭后,您仍然可以调用fetch(all|one|many)哪个将返回上一个execute语句的剩余结果.即使跑步Cursor.execute()仍然有效......



4> Craig McQuee..:

有趣的是,Python 3.0文档说“如果完成操作,我们也可以关闭游标”,而Python 2.7和3.6文档说:“完成后也可以关闭连接 ”。

Python 2.7和3.0-3.4文档未描述游标.close()方法。但是Python 3.5和3.6文档描述了cursor.close()方法:

立即关闭光标(而不是在任何时候__del__调用)。

从现在开始,光标将无法使用。一ProgrammingError,如果任何操作试图用光标将引发异常。



5> stackoverflo..:

此代码将自动关闭Cursor。它还将自动关闭并提交Connection

import sqlite3
import contextlib

def execute_statement(statement):
    with contextlib.closing(sqlite3.connect(path_to_file)) as conn: # auto-closes
        with conn: # auto-commits
            with contextlib.closing(conn.cursor()) as cursor: # auto-closes
                cursor.execute(statement)

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有