[英]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_at
和collected
組成。
這是使用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.