Как сделать запрос with_entities (список) в SQLAlchemy? - PullRequest
0 голосов
/ 16 января 2019

Я ищу способ запроса выбранного набора атрибутов (возможно, внутри функции), чтобы я мог экспериментировать с различными наборами атрибутов при создании модели ML для классификации.

Следующее в настоящее время работает, но не является динамическим, как я бы предпочел. Конечно, я мог бы ввести каждый атрибут, который я хочу, для каждого теста, но это не работает для поиска в сетке различных наборов атрибутов и т. Д.

peak_info = (session.query(Peak, LogFile).join(NmhcLine).join(GcRun)
         .join(LogFile).filter(LogFile.date > datetime(2019,1,1))
         .with_entities(Peak.pa, Peak.rt, LogFile.GCHeadP).all())

Количество объединений просто для того, чтобы принудительно установить определенный уровень контроля качества, который применяется к более высоким объектам в моей модели, а фильтр даты должен ограничить количество результатов разумным количеством для тестирования. Это возвращает хороший результат с тремя кортежами, который я помещаю в фрейм данных 3xn.

Что я хотел бы сделать, так это предоставить список атрибутов для классов Peak и Logfile, чтобы последняя строка могла выглядеть примерно так:

.with_entities([peak_attr1, peak_attr2], [logfile_attr1, etc]).all())

Я не привязан к with_entities (), если есть лучший способ добиться этого, предполагая, что результаты должны быть легко проанализированы в кадре данных.

Изменить:

arglist = [getattr(LogFile, 'date'), Peak.pa, Peak.rt, LogFile.GCHeadP]

peak_info = (session.query(Peak, LogFile).join(NmhcLine).join(GcRun)
             .join(LogFile).filter(LogFile.date > datetime(2019,1,1))
             .join(Datum).filter()
             .with_entities(*arglist).all())

Благодаря J.J. Комментарий Хакалы Мне удалось заставить вышеописанное работать с двумя разными способами указания атрибутов. Мне было интересно, не хватает ли мне какого-нибудь решения на Python, поэтому вопросы, специфичные для SQLAlchemy, ни к чему меня не приводили. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...