Я пишу небольшую оболочку 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, но, поскольку я переименовываю столбцы, эти данные нетривиально сопоставимы.