【问题标题】:Google App Engine ndb queryGoogle App Engine ndb 查询
【发布时间】:2014-09-02 13:39:38
【问题描述】:

我在 Google Cloud Datastore 中为我的项目创建了一个名为“Event”的实体。该实体有一个由 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 是无类型

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

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

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

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)

【问题讨论】:

  • 尝试在 ID 周围添加引号 event_key = ndb.Key("Event", "5629499534213120")
  • ID 应该是 int int,所以应该没问题。该实体是否有父实体?
  • 两个都试过了,还是不行,没有父实体

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


【解决方案1】:

好的,所以我终于想通了。

我必须对实体本身进行一些更改,才能正确过滤。所以新的属性如下所示。

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))

它就像一个魅力。查看应用引擎中的日志条目

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是的,但是我不再使用这种方法了。事件变量在 get_meeting_date() 方法中属于 NoneType 类型。
    猜你喜欢
    • 2015-06-27
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多