2015-11-04 59 views
1

我正在使用sqlite3在Python模塊中訪問數據庫。自定義類型的python sqlite3適配器

我經常在我的python對象中使用enums。目前我必須將我的枚舉轉換爲字符串,然後再將它們插入到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按預期工作。但通過這種方式,我必須爲所有枚舉分別註冊一個適配器。有沒有辦法消除這種冗餘?

P.S.我使用Python 2.7

回答

0

貌似簡單的方法是build the adaptationEnum本身:

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

,然後用SqliteEnum爲基準,爲您的其他枚舉類。