sqlalchemy dynamisches Mapping

Ich habe das folgende Problem:

Ich habe die Klasse:


class Word(object):

    def __init__(self):
        self.id = None
        self.columns = {}

    def __str__(self):
        return "(%s, %s)" % (str(self.id), str(self.columns))

self.columns ist ein Diktat, das Werte (columnName: columnValue) enthält. Die Namen der Spalten sind zur Laufzeit bekannt und werden in eine wordColumns-Liste geladen, z. B.


wordColumns = ['english', 'korean', 'romanian']

wordTable = Table('word', metadata,
                  Column('id', Integer, primary_key = True)
                  )
for columnName in wordColumns:
    wordTable.append_column(Column(columnName, String(255), nullable = False))

Ich habe sogar explizite Mapper-Eigenschaften erstellt, um die Zuordnung der Tabellenspalten zu word.columns [columnName] zu erzwingen. Anstelle von word.columnName wird beim Zuordnen kein Fehler angezeigt, aber es scheint, dass dies nicht funktioniert .


mapperProperties = {}
for column in wordColumns:
    mapperProperties['columns[\'%']' % column] = wordTable.columns[column]

mapper(Word, wordTable, mapperProperties)

Wenn ich ein Wortobjekt lade, erstellt SQLAlchemy ein Objekt mit den Eigenschaften word.columns ['english'], word.columns ['koreanisch'] usw., anstatt sie in word.columns dict zu laden. Daher wird für jede Spalte eine neue Eigenschaft erstellt. Darüber hinaus existiert word.columns dictionary noch nicht einmal.

Wenn ich versuche, ein Wort beizubehalten, erwartet SQLAlchemy auf die gleiche Weise, dass die Spaltenwerte in Eigenschaften mit dem Namen word.columns ['english'] (Zeichenfolgentyp) anstelle des Wörterbuchs word.columns gefunden werden.

Ich muss sagen, dass meine Erfahrung mit Python und SQLAlchemy sehr begrenzt ist. Vielleicht ist es nicht möglich, das zu tun, was ich versuche.

Jede Hilfe dankbar,

Danke im Voraus

Antworten auf die Frage(2)

Ihre Antwort auf die Frage