使用过滤器中的引号进行扫描会引发错误

时间:2019-07-12 12:40:01

标签: python-3.x hbase thrift happybase

我正在使用Happybase / python从hbase获取数据,并且已经使用了一些过滤功能,但是由于某种原因,它无法正常工作。

我的扫描代码过滤器是这样的:

f = "SingleColumnValueFilter ('input', '', =,'substring:{}')".format(keywork)
res = pTable.scan(reverse=True,limit=1000, filter= f.encode('utf-8'))

哪个btw可以工作现在,这个input列具有这样的记录:

"{'institution_id': '023', 'application_id': '01', 'channel_id...}"

问题是,如果我将keyword设置为:

keywork = "instition_id"

它可以工作,但是显然那不是我所需要的,所以当将其与我想要的值进行混为一谈时:

keywork = "instition_id': '"+ my_value

我得到thriftpy.transport.TTransportException: TTransportException(type=4, message='TSocket read 0 bytes')

经过新的测试后,我得出结论是单引号引起了问题,但我不知道为什么或如何解决它。 我尝试了keywork = "instition_id\': \'"keywork = 'instition_id\': \''都没有用。这可能有些愚蠢,但却使我发疯。

我正在考虑正则表达式,也许我会给institution_id?: ?my_value?这样的名称来告诉它任何字符都可以,但是我对正则表达式一无所知。

1 个答案:

答案 0 :(得分:1)

您对regex的想法很好,我不知道为什么即使转义引号也不起作用(我希望认识的人会向我们解释这一点),但这里有一些方法可以帮助您前进:

f = "SingleColumnValueFilter ('input', '', =,'regexstring:.*institution_id.: ." + your_value + ".*')"

.表示任何字符,因此引号这次不会触发错误。 我也是regex的初学者,所以我希望任何人都可以完善,编辑该行。