我在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
答案 0 :(得分:2)
看起来更简单的方法是build the adaptation进入Enum
本身:
class SqliteEnum(enum.Enum):
def __conform__(self, protocol):
if protocol is sqlite3.PrepareProtocol:
return self.name
然后使用SqliteEnum
作为其他枚举类的基础。