0

下面是 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))

我的 Courts 数据库中只有两个法院实体,court1 和 court2。在我的 Days 数据库中也只有 14 个工作日实体,7 个用于 court1,7 个用于 court2,名为 Sunday, ... , Saturday。在当前示例中,我试图获取 2 个星期一的密钥,一个用于 court1,一个用于 court2。weekday_key我不明白为什么根据下面的日志,对于两个拥有不同钥匙的不同法院,我得到的结果是一样的c_key

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

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

3 回答 3

1

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

但是,即使您解决了这个问题,它仍然无法正常工作,因为您需要的是法庭的 ID,而不是完整的密钥路径。

于 2012-09-10T22:17:54.040 回答
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 都是一样的。这似乎不对。

于 2012-09-11T04:10:16.487 回答
1

如何在 (week)Days 的特定工作日在 Courts in a specific court in a specific court in a specific day in Days 构建所有预订查询?

您知道键的值,因此您可以手动组成一个键(可以这么说),然后将该键作为祖先进行查询。

例如:

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

于 2012-09-11T12:50:30.723 回答