SQLAlchemy: Как сгруппироваться двумя полями и фильтром по дате

Таким образом, у меня есть таблица с меткой даты и двумя полями, что я хочу удостовериться, что они уникальны в прошлом месяце.

table.id
table.datestamp
table.field1
table.field2

Не должно быть никакой дублирующейся записи с тем же field1 + 2 составных значения в прошлом месяце.

Шаги в моей голове:

  1. Группа этими двумя полями
  2. Оглянитесь назад по данным прошлого месяца, чтобы удостовериться, что эта уникальная группировка не происходит.

Я имею настолько далеко, но я не думаю, что это работает:

result = session.query(table).group_by(\
    table.field1,
    table.field2,
    func.month(table.timestamp))

Но я не уверен, как сделать это в sqlalchemy. Кто-то мог советовать мне?

Большое спасибо!

8
задан 0atman 15 June 2010 в 10:52
поделиться

1 ответ

Следующее должно указать вам в правильном направлении, также смотрите встроенные комментарии:

qry = (session.query(
                table.c.field1,
                table.c.field2,
                # #strftime* for year-month works on sqlite; 
                # @todo: find proper function for mysql (as in the question)
                # Also it is not clear if only MONTH part is enough, so that
                # May-2001 and May-2009 can be joined, or YEAR-MONTH must be used
                func.strftime('%Y-%m', table.c.datestamp),
                func.count(),
                )
        # optionally check only last 2 month data (could have partial months)
        .filter(table.c.datestamp < datetime.date.today() - datetime.timedelta(60))
        .group_by(
                table.c.field1,
                table.c.field2,
                func.strftime('%Y-%m', table.c.datestamp),
                )
        # comment this line out to see all the groups
        .having(func.count()>1)
      )
19
ответ дан 5 December 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: