2013-02-24 2 views
1

J'utilise le code ci-dessous pour obtenir toutes les valeurs d'une ligne.Obtenir toutes les valeurs de champ sur la ligne

from google.appengine.ext import db 
from python_lib.models import Field 

field = Field.all()[0] 
names = Field.properties() 

for key in names: 
    print field.get(key) 

Mais il donne l'erreur suivante,

BadKeyError: Invalid string key name. 
+1

Avez-vous essayé d'imprimer '' noms'' et '' field.keys() '' - parce que l'erreur est peut-être valide. – sotapme

+0

@sotapme Les noms s'impriment correctement. Le problème se pose lorsque je les utilise pour imprimer des valeurs à partir du champ en utilisant Get – Saqib

Répondre

2

Vous confondez trop différent de api dans ce code.

for key in names: 
    print field.get(key) 

Votre appel get() est invalide, comme essayez d'appeler en fait une méthode de classe pour aller chercher une entité du magasin de données - voir la documentation de cette méthode https://developers.google.com/appengine/docs/python/datastore/modelclass#Model_get.

Pour obtenir une propriété par nom d'une instance de champ (votre objet), vous devez utiliser getattr

comme dans

for key in names: 
    print getattr(field,key) 

ou tous utilisent alternativement get_value_for_datastore(model_instance) de l'objet de la propriété, qui est retourné de propriétés() appel avec le nom de la propriété.

0

Est-ce que vous voulez?

code:

from google.appengine.ext import db 

class Field(db.Model): 
    author = db.StringProperty() 
    content = db.StringProperty(multiline=True) 
    date = db.DateTimeProperty(auto_now_add=True) 

a = Field(author="me") 
a.put() 

EDIT:

field = Field.all() 
for f in field: 
    print f.author 
    print f.content 


props = Field.properties() 

print props 
for vals in props: 
    print vals 

sortie:

<__main__.Field object at 0xb8c9e4c> 
{'content': <google.appengine.ext.db.StringProperty object at 0xb7c0aec>, 'date':  <google.appengine.ext.db.DateTimeProperty object at 0xb7c06cc>, 'author':  <google.appengine.ext.db.StringProperty object at 0xb7c0f6c>} 
content 
date 
author 
+0

Cela permettra d'imprimer uniquement les noms. Je veux obtenir des valeurs de l'objet champ. – Saqib

+0

Les propriétés sont des noms de champs, etc. Les valeurs sont extraites de la requête - Voir également https://developers.google.com/appengine/docs/python/ndb/ ndb –

Questions connexes