0

我刚刚创建并填写了我的第一个 PyTables 文件。试图查询数据,我遇到了一个问题。有一个ic_name类型的列,StringCol(500)我为此列创建了一个索引。以下代码工作正常:

count = 0
for x in f.root.raw.projects:
    if x['ic_name']=="XXX":
        count += 1

之后的值count比 200.000 多一点,这是正确的值。为了加快查询速度,我创建了索引并希望像这样查询:

f.root.raw.projects.where('ic_name == "XXX"')

现在我只得到 180 个结果!?任何暗示这里可能会发生什么?

4

1 回答 1

0

您没有提供任何测试脚本,所以我不确定这是否适用于您的问题。但我最近遇到了类似的问题。出于某种原因,有时对字符串值的搜索会成功,有时则不会。我的解决方案是在添加任何数据后在表上调用 flush() 方法(使用您的示例:)f.root.raw.projects.flush()

另一个问题可能是搜索表达式只需要字节,而不是字符串。在您的示例中,正确的方法应该是以下之一:

f.root.raw.projects.where('ic_name == b"XXX"')

f.root.raw.projects.where('ic_name == ' + str("XXX".encode()))

f.root.raw.projects.where('ic_name == ' + str("XXX".encode(encoding)))
于 2014-03-23T17:40:03.087 回答