Запрос SQLAlchemy: указать столбцы из автоматически загружаемой таблицы - PullRequest
0 голосов
/ 01 ноября 2019

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 из документации предполагает, что то, что я делаю, должно работать.

Есть идеи, что я могу делать не так?

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