我有一个带有嵌套表列的表,路由。在其下面是另外两种嵌套数据类型,master和slave都有一个整数id和字符串类型字段。
我想运行类似table.readWhere('route / master / id == 0')的东西,但我得到“变量route
指的是嵌套列,不允许在条件”< /强>
是否有一种方法可以在pytables中查询嵌套数据类型?
答案 0 :(得分:6)
您必须创建要在条件字符串中使用的变量。一种选择是定义变量字典:
table.readWhere('rId==0', condvars={'rId': table.cols.route.master.id})
另一种选择是为条件中使用的列定义局部变量。
rId = table.cols.route.master.id
table.readWhere('rId==0')
由于这会污染命名空间,我建议您创建一个包装代码的函数。我试图引用列本身,但似乎解释器在抛出NameError之前获取整个数据集。
table.readWhere('table.cols.route.master.id==0') # DOES NOT WORK
有关library reference中的where()方法的更多信息。
答案 1 :(得分:0)
以streeto的答案为基础,这是一种在构造查询时快速访问表中所有嵌套列的方法
condvars = {k.replace('/', '__'): v for k, v in table.colinstances.items()}
result = table.read_where('route__master__id == 0', condvars=condvars)
table.colinstances
返回一个平面dict,其键是表中所有列(包括嵌套列)的斜线分隔路径,并且其值是位于该路径的PyTables Col类的实例。您不能在查询中使用斜杠分隔的路径,但是如果您替换为Python标识符中允许的其他分隔符(在这种情况下,我选择了双下划线),则一切正常。您可以根据需要选择其他分隔符。