2017-02-19 1 views
1

Dans SQL, si je voulais interroger une table pour les données des plus récentes 10 minutes (quel que soit timezones et autres), je voudrais simplement faire (en utilisant le langage postgresql):Utiliser Django ORM pour récupérer les lignes récentes

select * from table where creation_time > now() - interval'10 mins'; 

Existe-t-il une manière équivalente de faire quelque chose comme ceci en utilisant l'ORM de Django, sans tenir compte des paramètres de fuseau horaire que l'on a définis pour l'application? Ce serait génial d'avoir un exemple illustratif ici.

Répondre

1

Essayez ceci: -

données dans les 10 minutes: -

from datetime import datetime, timedelta 

time_threshold = datetime.now() - timedelta(minutes=10) 
results = Table.objects.filter(createdOn__lte=time_threshold) 

Les 10 derniers rangs sur la base de la valeur createdOn: -

recentData = Table.objects.all().order_by('-createdOn')[:10] 

Les 10 derniers rangs si vous n'avez pas createdOn colonne à filtrer: -

recentData = Table.objects.all().order_by('-id')[:10] 
+0

Clarification: devrait-il être 'datetime.now()' ou 'datetime.utcnow()'. Dans mon cas particulier, cela aurait-il un sens d'avoir 'datetime.utcnow()'? –

+0

Pas vraiment parce que 'datetime.utcnow()' OS fourni des valeurs. –