Google App Engine ndb查询

时间:2014-09-02 13:39:39

标签: python google-app-engine google-cloud-datastore

我创建了一个实体,名为" Event"在我的项目的Google Cloud Datastore中。该实体具有由AppEngine生成的ID,后跟两个属性

  • 位置
  • 日期

我正在尝试通过其ID(5629499534213120)查询此实体,因此,这是我的代码。

    key = 5629499534213120
    e = Event.get_by_id(key)
    logging.info("Event Location = %s" % e.Location)

e的值是NoneType。

   __author__ = 'vinayjoseph'

from google.appengine.ext import ndb
import logging


class Event(ndb.Model):
    """Models an individual event at xxx xxxx """
    Date = ndb.DateTimeProperty()
    Location = ndb.StringProperty()


def get_meeting_date():
    """gets the next meeting date from the No SQL Schemaless Google Datastore
    """
    key = 5629499534213120
    e = Event.get_by_id(key)
    logging.info("Event Location = %s" % e.Location)

e是NoneType

在数据存储区中,我看到以下内容: https://console.developers.google.com/project/apps~xxxxx/datastore/editentity?key=xxxxx%2FEvent%20id:5629499534213120

screen shot of the entity in the datastore

我怀疑问题可能出在我的密钥上。

当我尝试使用dev_appserver.py在开发中查询数据存储时,它可以工作。我正在使用不同的密钥开发。

def get_meeting_date():
    """gets the next meeting date from the No SQL Schemaless Google Datastore
    """
    #dev
    key = 6401356696911872
    #prd
    #key = 5629499534213120
    e = Event.get_by_id(key)
    logging.info("Event Location = %s" % e.Location)

enter image description here

2 个答案:

答案 0 :(得分:2)

好的,所以我终于明白了。

我必须对实体本身进行一些更改,只是为了使过滤正确。所以新属性如下所示。 Entity Properties

python中的代码如下:

__author__ = 'vinayjoseph'

from google.appengine.ext import ndb
import logging
from datetime import datetime

class Event(ndb.Model):
    """Models an individual event at xxx xxx """
    Date = ndb.DateTimeProperty()
    Location = ndb.StringProperty()
    Address = ndb.StringProperty()
    Name = ndb.StringProperty()


def get_meeting_date():
    """gets the next meeting date from the No SQL Schemaless Google Datastore
    """
    qry = Event.query(Event.Name == 'Next Meeting Location')
    for event in qry.fetch(1):
        logging.info("Meeting is on %s at %s" % (str(event.Date), event.Address))

它就像一个魅力。查看app-engine中的日志条目

enter image description here

答案 1 :(得分:0)

在查询方法中,您使用的是祖先。如果您的实体有父级,则必须将其包含在get_by_id调用中。