2008-10-19 2 views

ответ

0

Я не знаю SQLAlchemy, поэтому я мог бы быть вне цели. Тем не менее, я думаю, что все, что вам нужно:

SELECT date_formatter(datetime_field, "format-specification") AS dt_field, COUNT(*) 
    FROM logs 
    GROUP BY date_formatter(datetime_field, "format-specification") 
    ORDER BY 1; 

ОК, может быть, вам не нужно ORDER BY, и, возможно, было бы лучше, чтобы заново определить выражение даты. Возможны альтернативы, например:

SELECT dt_field, COUNT(*) 
    FROM (SELECT date_formatter(datetime_field, "format-specification") AS dt_field 
       FROM logs) AS necessary 
    GROUP BY dt_field 
    ORDER BY dt_field; 

И так далее и так далее. В основном, вы форматируете поле datetime, а затем переходите к группировке и т. Д. В форматированном значении.

1

Считает ли подсчет таким же результат, когда вы просто группируете неформатированный столбец datetime? Если это так, вы можете просто запустить запрос и впоследствии использовать метод strftime() даты Python. то есть

query = select([logs.c.datetime, func.count(logs.c.datetime)]).group_by(logs.c.datetime) 
results = session.execute(query).fetchall() 
results = [(t[0].strftime("..."), t[1]) for t in results] 
4

Я не знаю об общем ответе SQLAlchemy. Большинство баз данных поддерживают некоторую форму форматирования даты, как правило, через функции. SQLAlchemy поддерживает вызовы через sqlalchemy.sql.func. Так, например, с помощью SQLAlchemy над Postgres задней части, и таблица my_table (Foo VARCHAR (30), когда метка времени) я мог бы сделать что-то вроде

my_table = metadata.tables['my_table'] 
foo = my_table.c['foo'] 
the_date = func.date_trunc('month', my_table.c['when']) 
stmt = select(foo, the_date).group_by(the_date) 
engine.execute(stmt) 

Группировка по дате усечен в месяц. Но имейте в виду, что в этом примере date_trunc() является функцией даты и времени Postgres. Другие базы данных будут разными. Вы не упомянули базу данных underlyig. Если есть независимый от базы данных способ сделать это, я никогда не нашел его. В моем случае я запускаю производство и тестирование aggst Postgres и модульные тесты aginst SQLite и прибегал к использованию определенных пользователем функций SQLite в своих модульных тестах для имитации функций Postat datetime.

+0

Именно то, что мне нужно ... теперь в руководстве SQLite, чтобы найти функцию усечения! Я думаю, что это `` STRFTIME ('% Y-% m', когда) `` в моем случае. – 2012-03-26 14:19:56

Смежные вопросы