Google App Engine: Counting entries from the datastore

Manas Chaturvedi

I'm working on a web application using Google App Engine with Python as the backend language. I need to count the total number of entries from the datastore based on certain number of parameters.

Here's the code for the same:

main.py

import os
import webapp2
import jinja2
from google.appengine.ext import db
from random import randint

template_dir = os.path.join(os.path.dirname(__file__), 'templates')
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir), autoescape=True)

class Handler(webapp2.RequestHandler):
    def write(self, *a, **kw):
        self.response.out.write(*a, **kw)
    def render_str(self, template, **params):
        t = jinja_env.get_template(template)
        return t.render(params)
    def render(self, template, **kw):
        self.write(self.render_str(template, **kw))

#databases

class Survey(db.Model):
    vam_id = db.StringProperty()
    subject = db.StringProperty(required = True)
    description = db.TextProperty(required = True)
    created = db.DateTimeProperty(auto_now_add = True)
    q1 = db.TextProperty(required = True)
    o11 = db.TextProperty(required = True)
    o12 = db.TextProperty(required = True)
    o13 = db.TextProperty(required = True)
    q2 = db.TextProperty(required = True)
    o21 = db.TextProperty(required = True)
    o22 = db.TextProperty(required = True)
    o23 = db.TextProperty(required = True)
    q3 = db.TextProperty(required = True)
    o31 = db.TextProperty(required = True)
    o32 = db.TextProperty(required = True)
    o33 = db.TextProperty(required = True)
    q4 = db.TextProperty(required = True)
    o41 = db.TextProperty(required = True)
    o42 = db.TextProperty(required = True)
    o43 = db.TextProperty(required = True) 
    q5 = db.TextProperty(required = True)
    o51 = db.TextProperty(required = True)
    o52 = db.TextProperty(required = True)
    o53 = db.TextProperty(required = True)

class Votes(db.Model):
    vam_id = db.StringProperty(required = True)
    q1_opt = db.TextProperty(required = True)
    q2_opt = db.TextProperty(required = True)
    q3_opt = db.TextProperty(required = True)
    q4_opt = db.TextProperty(required = True)
    q5_opt = db.TextProperty(required = True)


"""a = Survey(vam_id = "01", subject = "Metro", description = "A survey on Mumbai Metro",
            q1 = "How do you find rates fixed for Metros?", 
            o11 = "Appropriate", o12 = "Somewhat appropriate", o13 = "Inappropriate",
            q2 = "How satisfied are you with the customer service",
            o21 = "Extremely satisfied", o22 = "Moderately satisfied", o23 = "Not satisfied",
            q3 = "How satisfied are you with the interior of Mumbai Metro?",
            o31 = "Extremely satisfied", o32 = "Moderately satisfied", o33 = "Not satisfied",
            q4 = "Do you think travelling by Metro is more convenient than other transport?",
            o41 = "Yes", o42 = "No", o43 = "Can't say",
            q5 = "How will you rate Mumbai Metro?",
            o51 = "Very good", o52 = "Good", o53 = "Bad")  

a.put()         """  

class MainPage(Handler):
    def get(self):
        self.render("homepage.html")

class NewSurvey(Handler):
    def get(self):
        self.render("newsurvey.html")
    def post(self):
        vam_id = str(randint(1, 500))
        subject = self.request.get("title")
        description = self.request.get("description")
        q1 = self.request.get("q1")
        o11 = self.request.get("o11")
        o12 = self.request.get("o12")
        o13 = self.request.get("o13")
        q2 = self.request.get("q2")
        o21 = self.request.get("o21")
        o22 = self.request.get("o22")
        o23 = self.request.get("o23")
        q3 = self.request.get("q3")
        o31 = self.request.get("o31")
        o32 = self.request.get("o32")
        o33 = self.request.get("o33")
        q4 = self.request.get("q4")
        o41 = self.request.get("o41")
        o42 = self.request.get("o42")
        o43 = self.request.get("o43") 
        q5 = self.request.get("q5")
        o51 = self.request.get("o51")
        o52 = self.request.get("o52")
        o53 = self.request.get("o53")

        a = Survey(vam_id = vam_id, subject = subject, description = description, q1 = q1,
                    o11 = o11, o12 = o12, o13 = o13, q2 = q2,
                    o21 = o21, o22 = o22, o23 = o23, q3 = q3,
                    o31 = o31, o32 = o32, o33 = o33, q4 = q4,
                    o41 = o41, o42 = o42, o43 = o43, q5 = q5,
                    o51 = o51, o52 = o52, o53 = o53)
        a.put()            

class Existing(Handler):
    def get(self):
        surveys = Survey.all()
        self.render("existingsurvey.html", surveys = surveys)

class PermaSurvey(Handler):
    def get(self):
        vam = self.request.get("vam_id")
        su = Survey.all().filter("vam_id =", vam).get()
        self.render("perma.html", su = su)
    def post(self):
        vam = self.request.get("vam_id")
        q1_opt = self.request.get("q1")
        q2_opt = self.request.get("q2")
        q3_opt = self.request.get("q3")
        q4_opt = self.request.get("q4")
        q5_opt = self.request.get("q5")

        v = Votes(vam_id = vam, q1_opt = q1_opt, q2_opt = q2_opt, q3_opt = q3_opt,
                    q4_opt = q4_opt, q5_opt = q5_opt)  
        v.put()

        q11count = Votes.all().filter("vam_id = ", vam)
        q1count = q11count.filter("q1_opt = ", q1_opt).count()
        self.response.write(q1count)

app = webapp2.WSGIApplication([('/', MainPage),
                               ('/new', NewSurvey),
                               ('/existing', Existing),
                               ('/perma', PermaSurvey)], debug=True)

Here's what the 'Votes' datastore looks like:

enter image description here

However, the following query from our main.py file always returns the count as '0':

q11count = Votes.all().filter("vam_id = ", vam)
q1count = q11count.filter("q1_opt = ", q1_opt).count()
self.response.write(q1count)

What's wrong with the syntax of my query ?

pgiecek

It seems that you are trying to filter on TextProperty that is not possible. The snippet below will not work as you expect.

filter("q1_opt = ", q1_opt)

If you need to filter on that property, you will probably have to change its type to something else, e.g. StringProperty.

Unlike StringProperty, a TextProperty value can be more than 500 characters long. However, TextProperty values are not indexed and cannot be used in filters or sort orders.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Indexes and indexes entries limits in Google App Engine Datastore

From Dev

Inconsistent Fetch From Google App Engine Datastore

From Dev

Connect to Google App Engine Datastore

From Dev

Making a Google App Engine datastore key from a string

From Dev

AttributeError when listing all entities from Google App Engine datastore

From Dev

Google app engine: creating datastore entity from the post data

From Dev

AttributeError when listing all entities from Google App Engine datastore

From Dev

Google App Engine vote counting

From Dev

How to fetch the latest 25 entries from an App-Engine datastore entity kind

From Dev

Google App Engine (Python) - Datastore is duplicating entities

From Dev

Google App Engine Datastore Reindex Existing Entities

From Dev

Google App Engine Datastore - Testing Queries fails

From Dev

google app engine datastore Go Query with "in" operator

From Dev

Google App Engine Datastore sharding in Go

From Dev

Datastore vs Cloud SQL in Google App Engine

From Dev

Simple explanation of Google App Engine NDB Datastore

From Dev

Datastore & Memcache consistency - Google App Engine & Objectify

From Dev

Google App engine renaming fields in ndb datastore

From Dev

Multi Threading in Google App Engine Datastore

From Dev

Google App Engine Datastore modeling issue

From Dev

Google App Engine Launcher delete datastore

From Dev

Execute IN query in DataStore Google App Engine

From Dev

Google App Engine modules no datastore access

From Dev

Query google app engine datastore for all entities

From Dev

Google Cloud Datastore and Flask App Engine

From Dev

Running Datastore queries on Google App Engine

From Dev

Google App Engine Datastore get value of property

From Dev

Google App Engine Datastore delete entity by properties

From Dev

Performing large queries on Google App Engine Datastore

Related Related

  1. 1

    Indexes and indexes entries limits in Google App Engine Datastore

  2. 2

    Inconsistent Fetch From Google App Engine Datastore

  3. 3

    Connect to Google App Engine Datastore

  4. 4

    Making a Google App Engine datastore key from a string

  5. 5

    AttributeError when listing all entities from Google App Engine datastore

  6. 6

    Google app engine: creating datastore entity from the post data

  7. 7

    AttributeError when listing all entities from Google App Engine datastore

  8. 8

    Google App Engine vote counting

  9. 9

    How to fetch the latest 25 entries from an App-Engine datastore entity kind

  10. 10

    Google App Engine (Python) - Datastore is duplicating entities

  11. 11

    Google App Engine Datastore Reindex Existing Entities

  12. 12

    Google App Engine Datastore - Testing Queries fails

  13. 13

    google app engine datastore Go Query with "in" operator

  14. 14

    Google App Engine Datastore sharding in Go

  15. 15

    Datastore vs Cloud SQL in Google App Engine

  16. 16

    Simple explanation of Google App Engine NDB Datastore

  17. 17

    Datastore & Memcache consistency - Google App Engine & Objectify

  18. 18

    Google App engine renaming fields in ndb datastore

  19. 19

    Multi Threading in Google App Engine Datastore

  20. 20

    Google App Engine Datastore modeling issue

  21. 21

    Google App Engine Launcher delete datastore

  22. 22

    Execute IN query in DataStore Google App Engine

  23. 23

    Google App Engine modules no datastore access

  24. 24

    Query google app engine datastore for all entities

  25. 25

    Google Cloud Datastore and Flask App Engine

  26. 26

    Running Datastore queries on Google App Engine

  27. 27

    Google App Engine Datastore get value of property

  28. 28

    Google App Engine Datastore delete entity by properties

  29. 29

    Performing large queries on Google App Engine Datastore

HotTag

Archive