gpt4 book ai didi

用于自定义类型的 python sqlite3 适配器

转载 作者:太空宇宙 更新时间:2023-11-04 03:24:30 32 4
gpt4 key购买 nike

我正在使用 sqlite3用于 python 模块中的数据库访问。

我经常使用 enums在我的 python 对象中。目前,我必须先将我的枚举转换为字符串,然后再将它们插入到 sqlite 数据库中。我以下尝试注册通用适配器以使此转换隐式失败。

def adapt_enum(enum_instance):
return enum_instance.name

sqlite3.register_adapter(enum.Enum,adapt_enum)

上述实现导致以下错误。

sqlite3.InterfaceError: Error binding parameter 5 - probably unsupported type.

为每个枚举注册一个适配器,如下所示工作正常

class MyEnum(Enum):
a = 1
b = 2

def adapt_my_enum(my_enum_instance):
return my_enum_instance.name

sqlite3.register_adapter(MyEnum,adapt_my_enum)

MyEnum 的适配器按预期工作。但是这样做我必须分别为我的所有枚举注册一个适配器。有没有办法消除这种冗余?

附言我正在使用 python 2.7

最佳答案

看起来更简单的方法是 build the adaptation进入 Enum 本身:

class SqliteEnum(enum.Enum):
def __conform__(self, protocol):
if protocol is sqlite3.PrepareProtocol:
return self.name

然后使用 SqliteEnum 作为其他枚举类的基础。

关于用于自定义类型的 python sqlite3 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33524327/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com