In google app engine, is it possible to query the db to only get certain columns?
For example, I have a Model defined as follows:
class userData(ndb.Model):
id = ndb.StringProperty()
name = ndb.StringProperty()
emailAddress = ndb.StringProperty()
I usually query the db as follows:
userData.query().filter(ndb.GenericProperty('id') == "requiredId").fetch()
But this gives me results which contain id, name and email.
Now I would like to get only id and name but not emailAddress. How can I do that?
Thank you!
What you need is called projection query
Example:
qry = Article.query()
articles = qry.fetch(20, projection=[Article.author, Article.tags])
for article in articles:
# code here can use article.author, article.tags
# but cannot use article.title
Your code:
class userData(ndb.Model):
id = ndb.StringProperty()
name = ndb.StringProperty()
emailAddress = ndb.StringProperty()
user = userData.query().filter(ndb.GenericProperty('id') == "requiredId")\
.fetch(projection=[userData.id, userData.name])
Though I need to quote from the docs:
Projection can be useful; if you only need two small properties each from several large entities, the fetch is more efficient since it gets and deserializes less data.
Think about the above when you use projection queries
P.S.
Also use CapWords convention for class names in python if you want to follow the PEP
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With