我在构建执行以下操作的查询时遇到了麻烦:
车辆
*制作
*型号
*修剪
* part_number
*准确度
首先,我执行查询,查找每个部件号的最高准确度。我创建了一个字典,使得dic [part_number] =此part_number的最高准确度
然后我想做第二个查询。我匹配make,model和trim等一些值。我接下来要做的是检查当前记录的准确度是否等于已知的最高准确度。基本上我只想要具有最高准确度的记录(与make,model,trim匹配)
我尝试了什么:
query& =(db.vehicle.accuracy == dict [db.vehicle.part_number])
我收到以下错误:
在0xsomeval输入'exceptions.KeyError'gluon.dal.Field对象
这是解决此问题的最佳方法吗?也许还有另一种方法可以得到我想要的结果。
答案 0 :(得分:0)
值得注意的一些事情。首先,为了保持整洁,您可能需要构建一个查询列表,然后使用如下函数来减少它们:
def reduce_query_list(query_list, operator = 'and'):
if operator == 'or':
return reduce(lambda q01, q02:q01|q02, query_list)
elif operator == 'and':
return reduce(lambda q01, q02:q01&q02, query_list)
其次,在上面的代码中,您尝试使用实际的db字段作为键,而不是使用存储在该字段中的表中的某些值(可能是帐户)对于那个例外)。你确定这是你想做的吗?
编辑:
如果我理解正确,您的错误来自于尝试使用Field对象作为键。请尝试使用以下作为密钥列表:
part_number_list = [value['part_number'] for value in db(db.vehicle).select()]