2012-06-24 12 views
6

Jak na świecie przekazuję zmienną łańcuchową do GQL z pythonem ?? Mogę zrobić to dobrze w SQL, ale po prostu nie działa. Oto co mam:przekazać zmienną łańcuchową do kwerendy gql

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

To mnie zabija, ale powinno być naprawdę proste.

Dzięki!

Odpowiedz

8

To powinno działać:

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

GqlQuery przykłady składni:

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") 

źródło:https://developers.google.com/appengine/docs/python/datastore/gqlqueryclass

+0

ah świetnie! więc notacja: 1 mówi, że jest to pierwszy parametr wymieniony po GQL? – clifgray

2

parametry mogą być związani pozycji lub imię, spójrz na dokumentacji GqlQuery klasy po więcej informacji.

Więc można zrobić

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

lub

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

Tworzenie kwerendy tak:

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

lub zastosowanie: z pojedynczym cudzysłowie '% s' !!

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

jest jednym z tych technicznie lepszych? Mogę zmusić obie do pracy. jest szybszy od drugiego? – clifgray

+0

Nie działa ?: Czy pobrano wyniki zapytania? – voscausa

+0

Próbowałem tego w tej chwili i naprawdę musisz teraz pominąć pojedyncze cytaty i po prostu umieścić% s, a następnie zmienna po zakończeniu podwójnego cudzysłowu (bez przecinka również tam). – Belhor

Powiązane problemy