2012-06-24 18 views
6

Come faccio a passare una variabile stringa in GQL con python ?? Posso farlo bene in SQL ma non funziona. ecco quello che ho:passa una variabile stringa in una query gql

personalposts = db.GqlQuery("select * from PersonalPost where user_id = %s order by created desc limit 30" % user_id) 

Questo mi ha uccisa ma dovrebbe essere davvero semplice, mi sento.

Grazie!

risposta

8

Questo dovrebbe funzionare:

personalposts = db.GqlQuery("select * from PersonalPost where user_id =:1 order by created desc limit 30",user_id) 

GqlQuery esempi di sintassi:

q = GqlQuery("SELECT * FROM Song WHERE composer = 'Lennon, John'") 

q = GqlQuery("SELECT __key__ FROM Song WHERE composer = :1", "Lennon, John") 

q = GqlQuery("SELECT * FROM Song WHERE composer = :composer", composer="Lennon, John") 

fonte:https://developers.google.com/appengine/docs/python/datastore/gqlqueryclass

+0

ah fantastico! quindi la notazione: 1 sta solo dicendo che quello è il primo parametro elencato dopo il GQL? – clifgray

2

parametri possono essere vincolati da posizione o nome, consultare la documentazione GqlQuery di classe per maggiori informazioni.

Così si potrebbe fare

personalposts = db.GqlQuery("select * from PersonalPost where user_id = :1 order by created desc limit 30", user_id) 

o

personalposts = db.GqlQuery("select * from PersonalPost where user_id = :id order by created desc limit 30", id = user_id) 
1

creare una query come questa:

query = PersonalPost.all() 
query.filter('user_id', user_id) 
query.order('-created') 

o l'uso: con virgolette singole intorno a '% s' !!

personalposts = db.GqlQuery("select * from PersonalPost where user_id = '%s' order by created desc" % user_id) 
+0

è uno di questi tecnicamente migliore? Posso andare entrambi al lavoro. è uno più veloce dell'altro? – clifgray

+0

Non funziona ?: hai recuperato i risultati della query? – voscausa

+0

Ho provato questo al momento e in realtà è necessario saltare le virgolette singole ora e basta mettere% s poi la variabile dopo le virgolette termina (non c'è anche una virgola). – Belhor