我正在使用 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/