Python 根据祖父母祖先在数据存储中搜索数据
下面是python代码,我试图从预订模型中获取预订信息Python 根据祖父母祖先在数据存储中搜索数据,python,google-app-engine,ancestor,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
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))
我的法院数据库中只有两个法院实体:法院1和法院2。
“我的日子”数据库中也只有14个工作日实体,其中7个用于法庭1,7个用于法庭2,名为Sunday,星期六。在当前示例中,我试图获取两个星期一的密钥,一个用于court1,另一个用于court2。
我不明白为什么根据下面的日志,我在两个不同的法庭上得到了相同的工作日钥匙,这两个法庭本身就有不同的钥匙c_钥匙
在下面的日志中,无论我是从路径(
命令'c_Key'还是'court'输入db.Key.from_path),我都会得到完全相同的结果,这表明2个工作日
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()
每次计算键时都使用字符串'c_key'
,而不是变量c_key
的值
但是,即使您解决了这个问题,它仍然无法工作,因为您需要的是法庭ID,而不是完整的密钥路径。您每次都使用字符串'c_key'
计算密钥,而不是变量c_key
的值
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)
但是,即使您解决了这个问题,它仍然无法工作,因为您需要的是法庭ID,而不是完整的密钥路径
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)
我不喜欢这个答案的原因是工作日_key
在法庭上对所有c都是一样的。这似乎是不对的
我不喜欢这个答案的原因是工作日_key
在法庭上对所有c都是一样的。这似乎是不对的
我如何在特定的工作日(周)为特定法院的特定日期(以天为单位)的所有预订构造查询
您知道键的值,因此可以手动创建键(可以说),然后使用该键作为祖先进行查询
例如:
key = ndb.Key(BlogPost, 12345)
qry = Comment.query(ancestor=key)
但在这里,你可以使用
key = ndb.key(Locations, "Place1", Courts, "Name_Of_Court")
result = Reservations.query(ancestor=key)
诸如此类,所以你正在沿着链条往下走,用你拥有的所有信息(即他们想要保留的法院)构建钥匙。
然后,祖先查询的结果将是那些将密钥作为祖先传递的模型
我如何在特定的工作日(周)为特定法院的特定日期(以天为单位)的所有预订构造查询
您知道键的值,因此可以手动创建键(可以说),然后使用该键作为祖先进行查询
例如:
key = ndb.Key(BlogPost, 12345)
qry = Comment.query(ancestor=key)
但在这里,你可以使用
key = ndb.key(Locations, "Place1", Courts, "Name_Of_Court")
result = Reservations.query(ancestor=key)
诸如此类,所以你正在沿着链条往下走,用你拥有的所有信息(即他们想要保留的法院)构建钥匙。
然后,祖先查询的结果将是那些将密钥作为祖先传递的模型
好的,从您的回答中,我了解到db.Key.from_path()
命令需要Key_名称作为输入,而不是键。因此,我的问题是,在我的祖先方案中,保留是位置的曾孙(位置有子[法庭]有子[(周)天]有子[保留]。所有4个级别都有密钥_名称,这些名称在其兄弟姐妹中是唯一的,但相对于其他家庭可能不是唯一的。我如何在(周)天的特定工作日在特定法院对特定日期的所有预订进行查询?好的,从您的回答中,我了解db.key.from_path()
命令需要密钥名作为输入,而不是密钥。因此,我的问题是,在我的祖先方案中,保留是位置(位置有子[法院]有子[(周)天]有子[保留]的曾孙。所有4个级别都有关键的_名称,这些名称在其兄弟姐妹中是唯一的,但相对于其他家庭而言可能不是唯一的。我如何在(周)中的特定工作日在特定法院对特定日期的所有预订进行查询Days?你的答案是否依赖于使用ndb而不是db;我没有使用ndb,因此我不熟悉它,也不知道如何更改或后果。而且,我的情况涉及的祖先层比你解释的更多,那么键中会有更多的对吗?还有,我发现我的“答案”当两个不同的场地有同名的场地时,上述操作将失败;对一个场地的预订将显示在所有同名场地上。为了更具体地了解更多的祖先层,您在此处使用位置
和场地
生成的密钥将与(周)相关天
,然后我需要另一个步骤才能到达预订
。我不知道这是否需要另一个查询或更长的键,或者什么。你能说吗?键可以任意长,以便包含所有相关的祖先。为了简洁起见,我在两点停下来,但你可以添加到目前为止使用的所有键。我只是不是100%正确e排序是什么,所以我使用了我很清楚的方法。我相信db而不是ndb的情况非常相似。Paul的回答是正确的,我可以在没有ndb的情况下使用db做同样的事情。在他的解决方案中,我的关键是使用3对Model,key\u name
为put()创建key=
和用于获取(…)
。有一段时间,我没有将全部3对用于放置()
数据存储丢失了。您的答案是否依赖于使用ndb而不是db;我没有使用ndb,因此我不熟悉它,也不知道如何更改或后果。而且,我的情况涉及的祖先层比您解释的要多,那么键
中会有更多的对吗?还有,我发现了当两个不同的场地有同名的场地时,我上面的“答案”就失败了;reservat