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

时间:2015-11-04 14:24:25

标签: python enums sqlite

我在python模块中使用sqlite3进行数据库访问。

我经常在我的python对象中使用enums。目前,我必须在将枚举插入sqlite数据库之前将其转换为字符串。我以下尝试注册通用适配器以隐式进行此转换。

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)

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

{{1}}

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

P.S。我正在使用python 2.7

1 个答案:

答案 0 :(得分:2)

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

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

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