在Python的sqlite3中注册基类适配器

时间:2016-04-14 19:12:36

标签: python sqlite

考虑到我有一个动态创建的类:

def create_dynamic_class(*args):
    class Dynamic:
        def __init__(self, args):
            self.args_string = str(args)

如何为sqlite3注册适配器以将此类转换为sqlite对象(如文本?)

我尝试过这样创建一个基类:

class BaseDynamic: pass
def create_dynamic_class(*args):
    class Dynamic(BaseDynamic):
        def __init__(self, args):
            self.args_string = str(args)

使用sqlite3.register_adapter注册适配器,如下所示:

import operator
sqlite3.register_adapter(BaseDynamic, operator.attrgetter("args_string"))

但它似乎不起作用。如何注册基类?

1 个答案:

答案 0 :(得分:0)

根据python文档,您可以在基类上实现一个__conform__()方法,该方法返回一个sqlite3对象。该方法将由子类继承,并允许sqlite3使用新的动态类型。

在您的情况下,这是您需要的代码:

class BaseDynamic:
    def __conform__(self, protocol):
        if protocol is sqlite3.PrepareProtocol:
            return self.args_string

它将返回您的字符串并允许它存在于sqlite数据库中。

相关问题