blob问题(Cassandra驱动程序,Python)

时间:2016-10-26 09:29:33

标签: datastax datastax-enterprise

作为测试的一部分,我正在使用Cassandra Python驱动程序来尝试选择和删除Cassandra压力工具(标准1,在Keyspace1上)生成的其中一个表上的所有行。 Standard1由几个blob列组成。

我的方法是提取行的(主)键,然后运行循环以根据该行删除行。

我面临的问题是看起来像Cassandra驱动程序将blob(十六进制字节)转换为字符串,所以当我尝试将其传递给delete语句时,它失败并且“无法解析'XXXXXX'为十六进制字节”

CQLSH表中的数据看起来像“0x303038333830343432”,而下面的select将密钥提取为'069672027'。

有没有办法阻止十六进制字节转换为字符串?我应该使用的任何其他方法?

谢谢!

query  = SimpleStatement("SELECT (key) FROM \"Standard1\" LIMIT 10", consistency_level=ConsistencyLevel.LOCAL_QUORUM)
rows = session.execute(query)
for row in rows:
     query = SimpleStatement("DELETE FROM \"Standard1\" WHERE key = %s", consistency_level=ConsistencyLevel.LOCAL_QUORUM)
     session.execute(query, (row.key, ))

2 个答案:

答案 0 :(得分:0)

使用简单(无准备)语句时,需要从字符串创建缓冲区,以便编码器将其识别为blob类型。

http://datastax.github.io/python-driver/getting_started.html#type-conversions

试试这个:

session.execute(query, (buffer(row.key),)

或者,绑定一个准备好的语句会隐式地这样做。

答案 1 :(得分:0)

晚了一点,但是您也可以通过将其编码为十六进制并加0x来直接将其转换。例如:

'0x{}'.format(row.key.encode('hex'))