Я пытаюсь изучить Python и не могу понять, как использовать агрегированные функции с peewee.Совокупные записи с peewee и Python
В моем коде я сначала сделать импорт, как:
import sys
from datetime import datetime, timedelta
from peewee import *
from database import (db_init, MF_Djur, MF_Logg, MF_Senaste_Koll, MF_Foderspec)
Чтобы проверить Peewee баз данных и подключения работ, я использовал следующий код успешно:
antalgivor24h = MF_Logg.select() \
.where((MF_Logg.Logg_RFID_ID == tag_no) & (MF_Logg.Logg_Tid > timelastday)).count()
print(antalgivor24h)
Для моей проблемы: Я хотел бы использовать функцию sum, и здесь я получаю проблемы. Я хочу сделать это SQL в Peewee формате:
SELECT SUM(`Logg_Giva_Foder1`)
FROM mf_logg
WHERE `Logg_RFID_ID`='752007904107005' AND `Logg_Tid` >= (CURDATE() - INTERVAL 24 HOUR)
В Peewee Docs (http://peewee.readthedocs.org/en/latest/peewee/querying.html#aggregating-records) Я видел следующий пример кода:
query = (User
.select()
.annotate(
Tweet,
fn.Max(Tweet.created_date).alias('latest_tweet_date')))
На основании этого я попробовал:
totalgiva124h = MF_Logg.select() \
.where((MF_Logg.Logg_RFID_ID == tag_no) & (MF_Logg.Logg_Tid > timelastday)) \
.annotate(MF_Logg, fn.Sum(MF_Logg.Logg_Giva_Foder1))
Этот код вызывает у нас ошибку:
Traceback (most recent call last):
File "testscript.py", line 32, in <module>
.annotate(MF_Logg, fn.Sum(MF_Logg.Logg_Giva_Foder1))
NameError: name 'fn' is not defined
У меня ошибка в googled, но для совокупных записей peewee я не мог получить большую помощь (на общих именах Python, которые я нашел много, но ничего, что помогло мне). Однако на одной странице я читал, что это может помочь импортировать peewee fn отдельно. Поэтому я попытался добавить
from peewee import *, fn
, но затем я получаю следующее сообщение об ошибке, так не повезло:
Traceback (most recent call last):
File "testscript.py", line 32, in <module>
.annotate(MF_Logg, fn.Sum(MF_Logg.Logg_Giva_Foder1))
File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 1763, in annotate
query = query.ensure_join(query._query_ctx, rel_model)
File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 1522, in ensure_join
query = self.switch(lm).join(rm, on=on).switch(ctx)
File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 199, in inner
func(clone, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 1505, in join
self._query_ctx, model_class))
ValueError: No foreign key between <class 'database.MF_Logg'> and <class 'database.MF_Logg'>
Я надеюсь, что кто-то знает, как написать запрос в правильном пути. Любая помощь приветствуется.
http://docs.peewee-orm.com/en/latest/peewee/querying.html#retrieving-scalar-values – coleifer
Спасибо большое за вашу помощь. Ваше решение отлично работает, и теперь я буду читать больше о scalar(). :) – menhir