3
이것을 sqlalchemy 표현식 언어 호환 가능으로 변환하려고 시도 중입니다. 상자를 벗어날 수 있는지 모르겠으며 은 더 많은 경험이있는 사람이 나를 도울 수 있기를 바랍니다. 백엔드 는 PostgreSQL을하고 내가 표현으로 그것을 만들 수 없다면 내가 대신 에게 문자열을 만듭니다 : 모든SQLAlchemy 표현식 언어 문제
SELECT
DISTINCT date_trunc('month', x.x) as date,
COALESCE(b.res1, 0) AS res1,
COALESCE(b.res2, 0) AS res2
FROM
generate_series(
date_trunc('year', now() - interval '1 years'),
date_trunc('year', now() + interval '1 years'),
interval '1 months'
) AS x
LEFT OUTER JOIN(
SELECT
date_trunc('month', access_datetime) AS when,
count(NULLIF(resource_id != 1, TRUE)) AS res1,
count(NULLIF(resource_id != 2, TRUE)) AS res2
FROM tracking_entries
GROUP BY
date_trunc('month', access_datetime)
) AS b
ON (date_trunc('month', x.x) = b.when)
먼저 나는 tracking_entries에 매핑 클래스 TrackingEntry, select 문 내에있어 외부는 내가 빌드 방법 아무 생각이없는 외부 select 문을 고려하면 (의사) :
from sqlalchemy.sql import func, select
from datetime import datetime, timedelta
stmt = select([
func.date_trunc('month', TrackingEntry.resource_id).label('when'),
func.count(func.nullif(TrackingEntry.resource_id != 1, True)).label('res1'),
func.count(func.nullif(TrackingEntry.resource_id != 2, True)).label('res2')
],
group_by=[func.date_trunc('month', TrackingEntry.access_datetime), ])
같은 것을 로 변환 할 수 합류, 내 생각 엔 뭔가 같은 :
outer = select([
func.distinct(func.date_trunc('month', ?)).label('date'),
func.coalesce(?.res1, 0).label('res1'),
func.coalesce(?.res2, 0).label('res2')
],
from_obj=[
func.generate_series(
datetime.now(),
datetime.now() + timedelta(days=365),
timedelta(days=1)
).label(x)
])
그럼 내가 외래 키 ::
outer.outerjoin(stmt???).??(func.date_trunc('month', ?.?), ?.when)
누구나 가지고 제안이나 더 나은 솔루션을 사용하지 않고 함께 그 문을 연결해야 가정? 당신이 함께) (선택 가입 오브젝트 할 때
감사에 적용, 지금은 그것을 해결했습니다. 디버거 모드에서 전자 메일 관리자를 실행하면 결과 쿼리가 실제로 어떻게 보이는지 쉽게 알 수 있었고 문제가 어디에 있는지 파악할 수있었습니다. 나도 선택의 하나에 .alias (somename)를 사용해야했다. postgresql은 익명의 이름 지정을 사용하지 않았다. – Torkel