J'ai une simple table dans Google App Engine avec un champ de date. Je veux interroger toutes les lignes avec le champ de date évalué entre maintenant et il y a 6 heures. Comment puis-je former cette requête?Comment interroger toutes les entrées des 6 dernières heures (datetime) dans GQL?
Répondre
SELECT * FROM simpletable
WHERE datefield < DATETIME(year, month, day, hour, minute, second)
calcul de ces années, mois, & c, dans votre code d'application.
comment obtenez-vous un compte de cette requête? – erotsppa
Dans Python App Engine, vous créez un GqlQuery et appelez la méthode .count(); il n'y a aucun moyen de faire taire le COUNT directement dans le Gql lui-même. –
Et notez que le comptage est inefficace - c'est O (n) avec le nombre d'entités comptées, et dans App Engine, ne peut pas compter plus de 1000. –
Je sais que vous dites GQL, mais voici une fonction d'aide de python J'utilise:
import datetime
def seconds_ago(time_s):
return datetime.datetime.now() - datetime.timedelta(seconds=time_s)
Il peut y avoir une façon plus concise de l'écrire: Je ne suis pas un expert en python et je suis allé avec le premier chose qui a fonctionné. Jetez un oeil à la documentation datetime si vous vous en souciez. Il est utilisé comme ceci:
my_query = MyTable.all().filter("date >", seconds_ago(6*60*60))
Je suis sûr que l'on peut traduire à gql sans embêtait, mais je préfère l'interface orientée objet, et je ne sais pas la syntaxe DATETIME nécessaire.
En python la requête est alors utilisée comme ceci: titre
# get a count
my_query.count()
# get up to 1000 records
my_query.fetch(1000)
# iterate over up to 1000 records
for result in my_query:
# do something with result
+1 pour la solution basée sur la requête. –
Vous m'avez sauvé un énorme mal de tête, merci beaucoup. –
Edit pour le rendre plus convivial Google .. – Graviton