1 Востаннє редагувалося Eff1c (23.12.2020 19:01:13)

Тема: конвертувати sql запит в sqlalchemy

Привіт)
Потрібна ваша допомога. Ніяк не можу з sql запит перевести в sqlalchemy

select cast(date as date), count(registration) as registrations, count(payment.id) as number_of_payments, sum(sum), count(case tariff_id when 1 then 1 else null end) as for_month, count(case tariff_id when 2 then 1 else null end) as for_3_month from payment left join site_user on cast(date as date) = cast(registration as date) group by cast(date as date)

https://replace.org.ua/uploads/images/7323/f0503aeaf99ed2c18bd50ac98c8a7efa.png
Приклад виводу даного запиту
https://replace.org.ua/uploads/images/7323/7a6d6f595fd0ad0da6fe24b8366cb367.png
Структура payment
https://replace.org.ua/uploads/images/7323/09d2f0f1247609b03201a327787ba421.png
Структура site_user

Скоріш за все - в запиті є купа недоліків, хотів би почути вашу критику і поради.
Але головна проблема полягає в конвертаціїї його в sqlalchemy запит
Насамперед виникла проблема з left join.
Спробував щось типу такого

query = db.session.query(Payment, Site_user).outerjoin(Site_user, cast(Payment.date, Date)==cast(Site_user.registration, Date))

Це працює, але при додаванні до query

.group_by(cast(Payment.date, Date))

видає помилку

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.GroupingError) column "payment.id" must appear in the GROUP BY clause or be used in an aggregate function

А ще не знаю що робити з count-ами, ще й з умовами

2

Re: конвертувати sql запит в sqlalchemy

Eff1c написав:
cast(date as date) as date

made my date

Подякували: Q-bart, Arete, leofun013