- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个带有内部数据库连接的对象,该连接在其整个生命周期内都处于事件状态。在程序运行结束时,必须提交并关闭连接。到目前为止,我使用了显式的 close
方法,但这有点麻烦,尤其是当调用代码中可能发生异常时。
我正在考虑使用 __del__
方法来关闭,但在网上阅读了一些内容后我有顾虑。这是一个有效的使用模式吗?我可以确定内部资源将在 __del__
中正确释放吗?
This discussion提出了类似的问题,但没有找到满意的答案。我不想有一个明确的 close
方法,并且使用 with
不是一个选项,因为我的对象不像 open-play-close 那样简单地使用,但作为另一个更大对象的成员保留,该对象在 GUI 中运行时使用它。
C++ 具有完美运行的析构函数,可以安全地释放资源,所以我想 Python 也有一些约定俗成的东西。出于某种原因,情况似乎并非如此,社区中的许多人发誓反对 __del__
。那还有什么选择呢?
最佳答案
阅读 with陈述。您正在描述它的用例。
您需要将连接包装在“上下文管理器”类中,该类处理 with
使用的 __enter__
和 __exit__
方法声明。
参见 PEP 343获取更多信息。
编辑
“我的对象并没有像打开-播放-关闭那样简单地使用,而是作为另一个更大对象的成员保存”
class AnObjectWhichMustBeClosed( object ):
def __enter__( self ):
# acquire
def __exit__( self, type, value, traceback ):
# release
def open( self, dbConnectionInfo ):
# open the connection, updating the state for __exit__ to handle.
class ALargerObject( object ):
def __init__( self ):
pass
def injectTheObjectThatMustBeClosed( self, anObject ):
self.useThis = anObject
class MyGuiApp( self ):
def run( self ):
# build GUI objects
large = ALargeObject()
with AnObjectWhichMustBeClosed() as x:
large.injectTheObjectThatMustBeClosed( x )
mainLoop()
有些人称之为“依赖注入(inject)”和“控制反转”。其他人称之为Strategy 模式。 “ObjectThatMustBeClosed”是一种策略,插入到一些更大的对象中。该程序集是在 GUI 应用程序的顶层创建的,因为这通常是获取数据库等资源的地方。
关于python - 在对象销毁时清理内部 pysqlite 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/974813/
我使用的是 OSX 10.6,最近将 Python 从 2.6 升级到了 2.7,因此我必须升级 python 软件包。 这次我决定使用brew,并使用brew安装了sqlite、libspatial
在我的 Mac 上安装 sqlite 时,当它尝试创建 pysqlite2-doc 目录时,我的权限被拒绝。有什么想法吗? 最佳答案 您使用的 Mac OSX 和 Python 的确切版本是什么?所有
我需要将图像文件保存到 python 中的 sqlite 数据库中。我找不到解决办法。我该怎么做? 提前致谢。 最佳答案 写入 - cursor.execute('插入文件 (id, name, bi
我正在使用 pysqlite 制作一个程序来处理一些数据。对多个表和列中的相似字段进行相同的操作,所以我想我可以将sql语句参数化如下: def foo(): column = 'c' tab
我尝试安装 pysqlite。安装过程中开始出现一些可疑的东西。为什么我输入: python setup.py build 最后我得到了如下信息: src/module.c:286: error: ‘
我正在使用 pysqlite 构建和搜索关键字数据库以及与每个关键字对应的 URL 集。我的数据库搜索策略使用 1 个关键字效果很好,因为它只需要 SQL 语句中的 1 个 WHERE 子句。类似于:
我有一个带有内部数据库连接的对象,该连接在其整个生命周期内都处于事件状态。在程序运行结束时,必须提交并关闭连接。到目前为止,我使用了显式的 close 方法,但这有点麻烦,尤其是当调用代码中可能发生异
Gang,我开始使用 pySQLite,我正在尝试找到一个示例来说明如何在插入新记录(如果数据库中尚不存在)之前查询数据库中的现有记录。我觉得我忽略了一个非常基本的功能。 谢谢! 最佳答案 创建表时使
我想要 Python 和 sqlite 之间有一个接口(interface)。两者都安装在机器上。我有旧版本的 Python (2.4.3)。因此,默认情况下不包含 pysqlite。首先,我尝试通过
我认为我是个笨蛋,也许没有导入正确的包,但是当我导入时...... from pysqlite2 import dbapi2 as sqlite import types import re impo
使用 pysqlite 如何将用户定义类型用作比较中的值,例如。 g:“... WHERE 列名称 > 用户类型”? 例如,我定义了一个具有必要注册、转换器等的 bool 类型。Pysqlite/Sq
我使用的是 pysqlite,默认情况下,它不启用事务性 DDL(尽管 DDL 是来自 sqlite3 客户端的事务性)。 如何在 pysqlite 中启用事务 DDL? 最佳答案 pysqlite
是否有一些简单的方法或如何将 sqlite 数据库集成到 gtk.TreeModel (TreeView) 中? 我想要的是在 treeview 中显示来自 db 的数据,当我更改 db 中的某些内容
我正在使用 pysqlite 与 SQLite 数据库对话,我想知道检查 UPDATE SQL 语句是否真的成功更新某些内容的正确方法是什么一张 table 。 在 pysqlite 中执行此操作后是
美好的一天。 我在 Windows 上编译 pysqlite 时遇到问题。我已经设法开始编译了很多工作,但现在我遇到了这个错误: d:/mingw/bin/../lib/gcc/mingw32/4.7
我希望用户能够选择显示哪些订单结果,例如按年龄),我不想在从数据库中获取它们后对它们进行排序。 显然,如果用户能够指定影响 SQL 命令的输入,则需要对其进行清理,我通常会使用参数化,但 pysqli
我创建了 virtualenv: mkvirtualenv -p /usr/bin/python3.4 django 之后,我尝试安装 pysqlite: pip install pysqlite 但
Lion 升级后,我不得不重新安装我的 python 包,并在安装 PIL 和 pysqlite 时遇到问题。 ... unable to execute gcc-4.2: No such file
在 pysqlite 中,违反 NOT NULL 或 UNIQUE 约束同样会引发 IntegrityError。遗憾的是,此 Exception 类型不提供错误代码,而仅提供一条消息。 所以,假设我
pip install pysqlite失败,并输出以下错误日志: ➜ ~ pip install pysqlite Collecting pysqlite Using cached pysq
我是一名优秀的程序员,十分优秀!