2010-03-26 3 views
1

Hey j'ai ce code, mais cela ne fonctionne pas parce qu'il attend une chaîne. Comment puis-je le faire fonctionner?GQL comment choisir par UserProperty

class Atable(BaseModel): 
    owner = db.UserProperty() 
     (...) 

--------- // -------------- 
query = "SELECT * FROM Atable WHERE owner=", users.get_current_user() 
results = db.GqlQuery(query) 

Comment puis-je corriger cette recherche? Merci :)

J'ai commencé avec la base de données AppEngine hier alors soyez gentil :)

+0

Si quelqu'un peut fixer la Tittle question à un plus de titre descriptif, ce serait génial :) – fmsf

+0

Je pense que le titre de votre question est très bien –

+2

S'il vous plaît, s'il vous plaît, s'il vous plaît, ne pas assembler les chaînes GQL avec concaténation de chaînes. Nous n'avons pas besoin de vulnérabilités d'injection GQL. –

Répondre

2
query = GqlQuery("SELECT * FROM Atable WHERE owner = :1", users.get_current_user()) 
+0

Non, juste "WHERE owner =: 1" - ajouter USER fera attendre une chaîne. –

3

Vous pouvez essayer la voie GQL:

results = db.GqlQuery("SELECT * FROM Atable WHERE owner = :1", users.get_current_user().key()) 

ou la façon Python Requête:

query = db.Query(Atable) 
results = query.filter('owner =', users.get_current_user()) 
0

La méthode de requête python est probablement plus facile si vous avez juste besoin d'obtenir des données pour cet utilisateur.

Par exemple, dans quelque chose de votre classe (db.Model), vous pouvez définir:

@staticmethod 
def get_something_by_user(user): 

     query = db.Query(Something).filter('users =', user) 
     result = query.fetch(limit=1000) 

     return result 

Alors vous l'appelez en faisant ceci:

user = users.GetCurrentUser() 
results = Something.get_something_by_user(user) 
Questions connexes