Как дать список столбцов для выбора оператора в sqlalchemy? - PullRequest
0 голосов
/ 12 июня 2018

код ниже для выбора "страна", "пол" из "сообщения", где ~

    users = session.query(
        Message.country,
        Message.gender,
    ).filter(
        Message.date_joined.between(begin_date, end_date),
    ).all()

, когда я пытаюсь sql с этим

    columns = (
        Message.country,
        Message.gender,
    )

    users = session.query(
        columns
    ).filter(
        Message.date_joined.between(begin_date, end_date),
    ).all()

Я получил ошибку

sqlalchemy.exc.InvalidRequestError: SQL expression, column, or mapped entity expected - got '(<sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x117f215c8>, <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x117f21518>)'

Я подумал, что, если бы я дал параметр в качестве кортежа, было бы возможно, однако, было исключение.

Как я могу дать столбцы в качестве переменной для запроса?

1 Ответ

0 голосов
/ 12 июня 2018

столбцы должны быть частью списка и использовать load_only

from sqlalchemy.orm import load_only
columns = ['country', 'gender']

companies = session.query(Message).options(load_only(*columns)).filter(
             Message.date_joined.between(begin_date, end_date)).all()

Вы также можете попробовать with_entities

columns = [Message.country, Message.gender]
companies = session.query(Message).filter(
                 Message.date_joined.between(begin_date, end_date)).with_entities(*columns).all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...