使用已注册的转换器延迟反序列化Python sqlite3.Row列?

2024-09-30 08:17:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我注意到,当我注册一个自定义转换器(连接处于detect_types=sqlite3.PARSE_DECLTYPES模式)时,列被反序列化,即使它们从未被访问过。在我的特定应用程序中,我不能简单地从查询中省略列,但是一些反序列化非常昂贵,因此我希望将这些转换推迟到必要的时候。有没有办法将sqlite3置于延迟转换器模式

或者,我可以创建自己的行工厂,根据声明的数据类型在其__getitem__(self, item)中进行转换(而不是向sqlite3注册转换器)。然而,这似乎比内置的东西效率低

更新:我正在做另一种选择,我有一个自定义的行工厂类,它接受一个converter_by_col参数。我使用我的连接注册此行工厂,如下所示:

conn.row_factory = partial(LazyRow, converter_by_col=converter_by_col)

LazyRow.__getitem__(key)然后检查self.converter_by_col中的键,如果找到,则使用该转换器反序列化基础值;如果未找到,则返回基础值


Tags: selfby序列化parse工厂模式col基础

热门问题