2016-04-14 19 views
0

Betrachtet habe ich eine dynamisch erstellte Klasse:Registrierung Adapter Basisklasse in Python sqlite3

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

Wie kann ich einen Adapter für sqlite3 diese Klasse zu einem SQLite-Objekt konvertiert wie Text registrieren?

Ich habe versucht, wie so eine Basisklasse erstellen:

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

und der Registrierung als einen Adapter mit sqlite3.register_adapter wie so:

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

Aber es scheint nicht zu funktionieren. Wie registriere ich die Basisklasse?

Antwort

0

Gemäß den Python-Dokumenten können Sie eine __conform__()-Methode für die Basisklasse implementieren, die ein sqlite3-Objekt zurückgibt. Die Methode wird von der Kindklasse übernommen und erlaubt sqlite3, mit dem neuen dynamischen Typ zu arbeiten.

In Ihrem Fall ist dies der Code, den Sie benötigen, um für sie zu arbeiten:

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

Es wird Ihren String zurück und lassen Sie ihn in der SQLite-Datenbank existieren.