Inb4. Этот вопрос уже задан. Это общий вопрос, но у меня с ним уникальные трудности.
Все, что я пытаюсь сделать, - это использовать список имен столбцов (в виде строк), чтобы указать столбцы, выбранные в запросе. Это код:
def _extract_db(self, db: DataBase):
"""One of the default extracts. Extracts all data from a specified tbl using the passed DB connection"""
# Build the SELECT query
q: Query = self._session(db).query(self._tbl_obj(db))
# If specific columns have been specified, only load those columns
if self._fields:
_cols = [self._column_obj(_field, db) for _field in self._fields]
q = self._session(db).query(
_cols
)
_session
, _tbl_obj
и _column_obj
функции возвращают соответствующие объекты SQLAlchemy Session
, Table
и Column
соответственно. Объекты Table
и Column
поступают автоматически из БД. _fields
- это список полей для выбора
Когда я запускаю это, я получаю сообщение об ошибке:
InvalidRequestError: SQL expression, column, or mapped entity expected - got {...list of column objects}
Так что по какой-то причине запрос не похож на _cols
Я также пытался использовать функцию with_entities()
:
if self._fields:
_cols = [self._column_obj(_field, db) for _field in self._fields]
q = q.with_entities(_cols)
, но это дает мне ту же ошибку. Я пытаюсь передать список строк непосредственно в with_entities()
. Та же ошибка. Я попытался определить запрос со списком столбцов:
_cols = [self._column_obj(_field, db) for _field in self._fields]
q: Query = self._session(db).query(_cols)
та же ошибка.
Я действительно не понимаю. Я убедился, что элемент _cols
представляет собой список объектов SQLAlchemy Column
, и это те, которые мне нужны, и all из документации предполагает, что то, что я делаю, должно работать.
Есть идеи, что я могу делать не так?