Самоанализ SQLAlchemy декларативных классов

Я пишу маленький контейнер sqlalchemy для экспорта данных из базы данных MySQL с некоторыми легкими преобразованиями данных — главным образом меняющий имена полей. Мой текущий сценарий хорошо работает, но требует, чтобы я по существу описал свою модель дважды — однажды в объявлении класса и однажды как список имен полей для итерации.

Я пытаюсь выяснить, как использовать самоанализ для идентификации свойств на объектах строки, которые являются средствами доступа столбца. Следующие работы почти отлично:

for attr, value in self.__class__.__dict__.iteritems():
    if isinstance(value, sqlalchemy.orm.attributes.InstrumentedAttribute):
        self.__class__._columns.append(attr)

за исключением того, что мой к - много средств доступа отношения является также экземплярами sqlalchemy.orm.attributes. InstrumentedAttribute, и я должен пропустить их. Там какой-либо путь состоит в том, чтобы различать два, в то время как я осматриваю словарь класса?

Большая часть документации, которую я нахожу на sqlalchemy самоанализе, включает рассмотрение metadata.table, но так как я переименовываю столбцы, те данные не являются тривиально отображаемыми.

7
задан Seamus Campbell 31 July 2010 в 23:41
поделиться

2 ответа

Я бы все еще хотел увидеть ответ на этот вопрос, но я обошел его, изменяя имена аксессоров отношений (например, '_otherentity' вместо 'otherentity') и затем фильтруя по имени. Для моих целей работает отлично.

1
ответ дан 7 December 2019 в 03:09
поделиться

Сопоставитель каждого сопоставленного объекта имеет атрибут столбцы со всеми определениями столбцов. Например, если у вас есть декларативный класс User , вы можете получить доступ к сопоставителю с помощью User .__ mapper __ и столбцов с:

list(User.__mapper__.columns)

Каждый столбец имеет несколько атрибутов, включая имя (который может не совпадать с сопоставленным атрибутом с именем key ), обнуляемым , уникальным и так далее ...

7
ответ дан 7 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: