1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #!/usr/bin/env python
# 2013-01-18 johnpfeiffer
import cgi
import datetime
import webapp2
from google.appengine.ext import db
class BlobStoreIndex( db.Model ):
blobstore_key = db.StringProperty()
name = db.StringProperty()
date = db.DateTimeProperty( auto_now_add = True )
class MainPage( webapp2.RequestHandler ):
def get( self ):
self.response.out.write( '<html><body>' )
self.response.out.write( 'BlobStoreIndex <br/>' )
# query_kind = BlobStoreIndex.all()
# self.response.out.write( "DEBUG: " + cgi.escape( str( query_kind ) ) + "<br/>" )
q = db.Query( BlobStoreIndex )
# q.filter("name =" , "test" )
q.order( "-date" )
q.fetch( 100 )
for element in q :
self.response.out.write( "%s , %s , %s <br/>" % (element.name , element.blobstore_key , element.date ) )
self.response.out.write( "</body></html>" )
"""
# not supported by App Engine Dev Environment
index_list = q.index_list()
for ix in index_list:
self.response.out.write( "Kind: %s" % ix.kind() )
self.response.out.write( "<br />" )
self.response.out.write( "Has ancestor? %s" % ix.has_ancestor() )
self.response.out.write( "<br />" )
for name, direction in ix.properties():
self.response.out.write( "Property name: " + name )
self.response.out.write( "<br />" )
if direction == db.Index.DESCENDING:
self.response.out.write( "Sort direction: DESCENDING" )
else:
self.response.out.write( "Sort direction: ASCENDING" )
self.response.out.write( "<br />" )
"""
# TODO: use template system
class AddPost( webapp2.RequestHandler ):
def get( self ):
self.response.out.write( '<html><body>' )
self.response.write( 'Add uses POST' )
self.response.out.write( "</body></html>" )
def post( self ):
self.response.out.write( '<html><body>' )
post_values = self.request.POST
keyList = post_values.keys()
name = post_values[ "name" ]
index = BlobStoreIndex()
index.name = name
index.put()
self.response.out.write( 'successful post: ' + name )
self.response.out.write( "</body></html>" )
# self.redirect( '/' )
class AddForm( webapp2.RequestHandler ):
def get( self ):
self.response.out.write( '<html><body>' )
self.response.out.write( """
<form action="/addpost" method="post">
<table>
<tr><td><label>password</label></td><td><input type="password" id="password" name="password" /></td></tr>
<tr><td><label>name</label></td><td><input type="text" id="name" name="name" /></td></tr>
<tr><td><label>blobstore key</label></td><td><input type="text" id="blobstorekey" name="blobstorekey" /></td></tr>
<tr><td></td><td><input type="submit"></td></tr>
</table>
</form>
""" )
self.response.out.write( "</body></html>" )
# url handler below
app = webapp2.WSGIApplication( [
( '/', MainPage ),
( '/addform' , AddForm ),
( '/addpost' , AddPost )
], debug = True )
|
COMMAND LINE
dev_appserver.py --clear_datastore googleappengine01/
In your code you can query...
q = db.Query( Employee )
for element in q.run( limit = 5 ):
print element.name + "<br />\n"
OR keys = models.ApiKey.gql( 'WHERE id = :1', id ) # returns a GQL result list
USING THE WEB UI http://localhost:8091/_ah/admin/datastore
- Datastore viewer will be empty (no objects in persistence)
-
Interactive Console (enter the text below and run program)
from google.appengine.ext import db
class Employee(db.Model): name = db.StringProperty( required = True )
main
e = Employee( name = "test" ) e.put()
-
Datastore viewer will now display an Employee -> List Entities -> Key = random string, name = test
Query query = new Query( "Greeting" , guestbookKey )
q = db.Query( Employee )
GQL is similar to SQL
q = GqlQuery("SELECT * FROM Song WHERE composer = 'Lennon, John'")