簡體   English   中英

如何在 SQLAlchemy 中按星期幾分組並對星期幾的特定列求和?

[英]How do I group by day of week in SQLAlchemy and sum a certain column for each day of week?

我有一個存儲 datetime.datetime object 的 created_at 列。

我有一個專欄,每天存儲一個 integer,稱為collected

我想要的是按星期幾(周一、周二、周三等)對這張表進行分組,然后總結每天收集到的值。

output 應該是這樣的 ->

 [{'collected': 11, 'day': 'Sunday'}, {'collected': 9, 'day': 'Monday'}, {'collected': 1, 'day': 'Tuesday'}, {'collected': 10, 'day': 'Wednesday'}, {'collected': 7, 'day': 'Saturday'}]

我嘗試使用 session.query(func.dayofweek( SQL_table.datetime_column).all()

並引發錯誤 function 星期幾(沒有時區的時間戳)不存在。

請幫助我如何在 SQLAlchemy 中進行這樣的查詢。謝謝...

測量由 ORM class 和列created_atcollected組成。

這是使用to_char

這使用“ "Day""FM"前綴來抑制將日期名稱填充為相同長度:


with Session(engine) as session:
    # by name, like "Sunday"
    for dow_name, sum_of_collected in session.query(func.to_char(Measurement.created_at, 'FMDay').label('dow_name'), func.sum(Measurement.collected)).group_by("dow_name"):
        print (dow_name, sum_of_collected)
    # by index, like 0
    for dow_index, sum_of_collected in session.execute(select(func.to_char(Measurement.created_at, 'D').label('dow_index'), func.sum(Measurement.collected)).group_by("dow_index")):
        print (dow_index, sum_of_collected)

我能夠使用它獲得 output。

Session.query(sqlalchemy.extract("dow",Column.created_at).label("day_of_week",
                sqlalchemy.func.sum(Column.collected).label("collected"))

然后我只是在查詢上運行了一個 for 循環,並使用 dict 將索引替換為日期名稱。

day_name = {
    0: "Sunday",
    1: "Monday",
    2: "Tuesday",
    3: "Wednesday",
    4: "Thursday",
    5: "Friday",
    6: "Saturday",
}

result = []
for row in query:
    result.append(
        {"collected": row["collected"], "day": day_name[row["day_of_week"]]}
    )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM