3

我有一个带有嵌套表列的表,路由。下面是另外两种嵌套数据类型,主数据类型和从数据类型,它们都具有整数 id 和字符串类型字段。

我想运行类似 table.readWhere('route/master/id==0') 但我得到“变量route指的是嵌套列,条件不允许”

有没有一种方法可以查询 pytables 中的嵌套数据类型?

4

2 回答 2

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

有关库参考中 where() 方法的更多信息。

于 2013-05-31T14:18:47.897 回答
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 标识符中允许的其他分隔符(在本例中,我选择了双下划线),那么一切正常。如果您愿意,可以选择其他分隔符。

于 2018-06-20T02:12:14.247 回答