2009-06-09 2 views
0

J'essaie de comparer la clé pour filtrer les résultats dans gql en python, mais la comparaison directe ou le typage à int fonctionne. Par conséquent, je suis obligé de faire un travail comme mentionné dans les lignes non commentées ci-dessous. Des indicesgql ne fonctionne pas pour obtenir des paramètres pour les clés

row = self.request.get("selectedrow") 
#mydbobject = DbModel.gql("WHERE key=:1", row).fetch(1) 
#mydbobject = DbModel.gql("WHERE key=:1", int(row)).fetch(1)#invalid literal for int() with base 10 
#print mydbobject,row 

que = db.Query(DbModel) 
results = que.fetch(100) 
mydbobject = None 
for item in results: 
if item.key().__str__() in row: 
    mydbobject = item 

EDIT1- une nouvelle tentative qui ne récupère pas le dossier, la clé existe en datastore avec enregistrement mydbobject = DbModel.gql ("WHERE key = KEY ('% s')" % ligne). fetch (1)

Répondre

1

Ai-je raison de penser que vous voulez simplement récupérer un objet avec une clé particulière? Dans ce cas, le get and get_by_id methods peut être utile:

mydbobject = DbModel.get_by_id(int(self.request.get("selectedrow"))) 
+0

thx et votre hypothèse était juste – dhaval

0

L'erreur « invalide littérale int() » indiquent que le passage de paramater int était pas une chaîne représentant un nombre entier. Essayez d'imprimer la valeur de "row" pour le débogage, je parie que c'est une chaîne vide.

La méthode correcte pour extraire un élément de la clé consiste simplement à utiliser la méthode "get" ou "get_by_id". Dans votre cas:

row = self.request.get("selectedrow") 
mydbobject = DbModel.get(row) 
+0

ligne contient la clé lorsque l'objet de dumping et non vide, mais vous obtiendrez des œuvres, thx tellement – dhaval

Questions connexes