Как заменить group_by в запросе sqlalchemy, чтобы база данных postgresql не выдавала ошибку - PullRequest
0 голосов
/ 12 апреля 2020

У меня был рабочий запрос в моем файле flask, пока я не попытался развернуть свое приложение на heroku. Причина, по которой это работало, заключается в том, что я использовал базу данных sqlite3 локально, но мне пришлось использовать базу данных postgresql в производственном режиме.

Проблема, которую я имею и не могу решить, заключается в следующем запросе sqlalchemy:

companies = StaffMember.query.filter_by(user_id=current_user.id).group_by(StaffMember.company).all()

Когда я запускаю это в postgresql, я получаю следующую ошибку:

sqlalchemy.ex c .ProgrammingError: (psycopg2.errors.GroupingError) столбец staffMembers.id должен присутствовать в предложении GROUP BY или использоваться в статистической функции

Из того, что я выяснил, проблема в том, что group_by не работает так же, как в postgresql, и что вместо этого я должен попытаться использовать ключевое слово «Different». Но я на самом деле не знаю, как правильно использовать отличный для составления списка компаний, уникальных в sqlalchemy.

Я пробовал такие вещи, как:

companies = StaffMember.query.filter_by(user_id=current_user.id).distinct(StaffMember.company).all()

или:

companies = StaffMember.query.filter_by(user_id=current_user.id).filter_by(StaffMember.company).distinct()

Не думаю, что я я правильно создаю запрос.

Я пытался читать документы, но не могу понять их на текущем уровне кодирования.

1 Ответ

2 голосов
/ 12 апреля 2020

Если вы пытаетесь получить список всех отдельных компаний в таблице, вы можете сделать:

companies = StaffMember.query.with_entities(
     StaffMember.company
).filter_by(
    user_id=current_user.id
).distinct()

Или также:

companies = session.query(
     StaffMember.company
).filter_by(
    user_id=current_user.id
).distinct()

В этом случае, используя группу или иначе будет давать тот же результат. Если вы хотите использовать group by, все выбранные столбцы, которые не агрегированы, должны быть внутри .group_by()

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