Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据祖父母祖先在数据存储中搜索数据_Python_Google App Engine_Ancestor - Fatal编程技术网

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

下面是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))
我的法院数据库中只有两个法院实体:法院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