我刚创建并填充了我的第一个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个结果!?任何提示可能会发生什么?
答案 0 :(得分: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)))