考虑到我有一个动态创建的类:
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"))
但它似乎不起作用。如何注册基类?
答案 0 :(得分:0)
根据python文档,您可以在基类上实现一个__conform__()
方法,该方法返回一个sqlite3
对象。该方法将由子类继承,并允许sqlite3使用新的动态类型。
在您的情况下,这是您需要的代码:
class BaseDynamic:
def __conform__(self, protocol):
if protocol is sqlite3.PrepareProtocol:
return self.args_string
它将返回您的字符串并允许它存在于sqlite数据库中。