这是我的两难境地:我必须查看实体列表,检查某个重复属性(我使用的是NDB)是否为空。如果是,那么我给它赋值并put()
。否则我跳过实体。我试图在googleappengine附带的远程登录shell中完成所有这些。在
我试着重复一遍模型.查询(),执行条件并写入值,但当我开始编写时,进程被挂起。当我最后使用Ctrl-C时,它弹出一个错误,说:“assertresponse.set_status_大小()==len(服务器密钥);AssertionError“。我假设这和它试图检索的实体的大小有关。有人知道怎么回事吗?以下是我当前的代码:
>>> for entity in Model.query():
... if not len(entity.references):
... entity.references = somevalue
... continue
... print 'skipped'
我只是过滤查询而不是使用if
语句,但是我不确定如何根据重复属性的长度过滤查询。在
代码示例在找到第一个没有引用的实体时返回(如果没有引用,则打印
skipped
),但是它可能会留下一些没有任何引用的实体。我不知道这是否是你想要的。在如果只有几个引用值是可能的,例如['python'、'ruby'、'php'],那么我认为您可以像
Model.query(Model.references.IN(['python', 'ruby', 'php'])))
那样执行Repeated Properties查询,将该列表与所有实体的列表进行比较,然后迭代其余的实体。(我对NDB了解不多,我怀疑这是一个很好的方法,但希望它对某些数据集有效。)我终于成功了!我使用
query.fetch_page
成批获取查询,然后迭代每个批并应用更改。在你有多少实体?如果您有超过100个,那么从远程api查询是非常低效的(二次方的)。所以这可以解释为什么它挂了。在
你是对的,你不能写一个查询来检测你正在寻找的条件。在
相关问题 更多 >
编程相关推荐