我刚刚创建并填充了我的第一个 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 个结果!?任何暗示这里可能发生了什么?
您没有提供任何测试脚本,所以我不确定这是否适用于您的问题。但我最近遇到了类似的问题。出于某种原因,有时搜索字符串值成功,有时不成功。我的解决方案是在添加任何数据后对表调用 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)))