У меня есть следующая проблема:
У меня есть класс:
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 - это dict, который будет содержать значения (columnName: columnValue). Имя столбцов известно во время выполнения, и они загружаются в список wordColumns, например
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))
Я даже создал явные свойства mapper, чтобы "принудительно" столбцы таблицы отображались в word.columns [columnName], вместо word.columnName, я не получаю никаких ошибок при сопоставлении, но, похоже, т работы.
mapperProperties = {}
for column in wordColumns:
mapperProperties['columns[\'%']' % column] = wordTable.columns[column]
mapper(Word, wordTable, mapperProperties)
Когда я загружаю объект word, SQLAlchemy создает объект, который имеет свойства word.columns ['english'], word.columns ['korean'] и т.д. вместо того, чтобы загружать их в word.columns dict. Поэтому для каждого столбца создается новое свойство. Кроме того, словарь word.columns даже не существует.
Точно так же, когда я пытаюсь сохранить слово, SQLAlchemy ожидает найти значения столбца в свойствах, названных как word.columns ['english'] (строковый тип) вместо словаря word.columns.
Я должен сказать, что мой опыт работы с Python и SQLAlchemy довольно ограничен, возможно, невозможно сделать то, что я пытаюсь сделать.
Любая помощь оценивается,
Спасибо заранее.