根据祖父祖先搜索数据存储区的数据

时间:2012-09-10 21:55:08

标签: python google-app-engine ancestor

下面是python代码,我试图从预订模型中获取预订信息。

    i=0
    for c in courts:
        court = names[i]
        i=i+1
        c_key=c.key()
        logging.info("c_key: %s " % c_key)
        weekday_key= db.Key.from_path('Courts', 'c_key', 'Days', weekday)
        logging.info("weekday_key: %s " % weekday_key)
        logging.info("weekday: %s " % weekday)
        logging.info("court: %s " % court)
        reservation = db.Query(Reservations)
        nlimit=2*len(times)
        reservations = reservation.fetch(limit=nlimit)
        logging.info("reservations: %s " % len(reservations))

我的法院数据库中只有两个法院实体,即court1和court2。 我的Days数据库中只有14个工作日实体,court1为7,court2为7,命名为Sunday,...,Saturday。在当前的例子中,我试图获得2个星期一的关键,一个用于court1,一个用于court2。 我不明白为什么根据下面的日志,我对两个不同的法院weekday_key有不同的c_key

在下面的日志中,无论我输入db.Key.from_path(命令'c_key'还是'court',我都得到完全相同的结果,这表明2 weekday_key s的值是相同的,没有像我预期的那样不同。

INFO     2012-09-10 21:25:19,189 views.py:226] c_key: ag1kZXZ-c2NoZWR1bGVycicLEglMb2NhdGlvbnMiBlJvZ2VycwwLEgZDb3VydHMiBmNvdXJ0MQw 
INFO     2012-09-10 21:25:19,189 views.py:228] weekday_key: ag1kZXZ-c2NoZWR1bGVyciELEgZDb3VydHMiBWNfa2V5DAsSBERheXMiBk1vbmRheQw 
INFO     2012-09-10 21:25:19,189 views.py:229] weekday: Monday 
INFO     2012-09-10 21:25:19,189 views.py:230] court: court1 
INFO     2012-09-10 21:25:19,192 views.py:235] reservations: 1 
INFO     2012-09-10 21:25:19,192 views.py:226] c_key: ag1kZXZ-c2NoZWR1bGVycicLEglMb2NhdGlvbnMiBlJvZ2VycwwLEgZDb3VydHMiBmNvdXJ0Mgw 
INFO     2012-09-10 21:25:19,192 views.py:228] weekday_key: ag1kZXZ-c2NoZWR1bGVyciELEgZDb3VydHMiBWNfa2V5DAsSBERheXMiBk1vbmRheQw 
INFO     2012-09-10 21:25:19,192 views.py:229] weekday: Monday 
INFO     2012-09-10 21:25:19,192 views.py:230] court: court2 
INFO     2012-09-10 21:25:19,195 views.py:235] reservations: 1 

我的模型如下。

class Courts(db.Model):    #parent is Locations, courtname is key_name
    location = db.ReferenceProperty(Locations)
    timezone = db.StringProperty()

class Days (db.Model):    #parent is Courts, name is key_name, day of week
    court = db.ReferenceProperty(Courts)
    startTime = db.ListProperty(int)
    endTime = db.ListProperty(int)

class Reservations(db.Model):    #parent is Days, hour, minute HH:MM is key_name
    weekday = db.ReferenceProperty(Days)
    day = db.IntegerProperty()
    nowweekday = db.IntegerProperty()
    name = db.StringProperty()
    hour = db.IntegerProperty()
    minute = db.IntegerProperty()

3 个答案:

答案 0 :(得分:1)

您每次使用字符串 'c_key'计算密钥,而不是变量c_key的值。

然而即使你解决了这个问题,它仍然无效,因为你需要法院的ID,而不是完整的关键路径。

答案 1 :(得分:1)

    i=0
    for c in courts:
        court_id = names[i]
        i=i+1
        weekday_key = db.Key.from_path('Courts', c.key().name(), 'Days', weekday)
        reservation=Reservations.all()
        reservation.ancestor(weekday_key)
        nlimit=2*len(times)
        reservations = reservation.fetch(limit=nlimit)

我不喜欢这个答案,weekday_key对于法庭上的所有c都是一样的。这似乎不对。

答案 2 :(得分:1)

  

如何在(星期)特定工作日的法院特定法院对特定日期的所有预订构建查询?

您知道密钥的值,因此您可以手工制作密钥(可以这么说),然后使用该密钥作为祖先进行查询。

例如:

key = ndb.Key(BlogPost, 12345)
qry = Comment.query(ancestor=key)

但在这里你会使用像

这样的东西
key = ndb.key(Locations, "Place1", Courts, "Name_Of_Court") 
result = Reservations.query(ancestor=key)
等等,所以你正在沿着链条工作,并用你拥有的所有信息(即他们想要保留的法院)建立密钥。 然后,您的祖先查询的结果将是那些具有您作为其祖先传递的密钥的模型。

https://developers.google.com/appengine/docs/python/ndb/queries#ancestor