Datastax Blob问题(Cassandra驱动程序,Python)

Datastax Blob问题(Cassandra驱动程序,Python),datastax,datastax-enterprise,Datastax,Datastax Enterprise,作为测试的一部分,我使用Cassandra Python驱动程序尝试选择和删除Cassandra压力工具(Standard1,在Keyspace1上)生成的一个表上的所有行。Standard1由几个blob列组成 我的方法是提取行的(主键)键,然后运行一个循环来删除基于该键的行 我面临的问题是,Cassandra驱动程序似乎将blob(十六进制字节)转换为字符串,因此当我尝试将其传递给delete语句时,它失败了,因为“无法将'XXXXXX'解析为十六进制字节” CQLSH上的表中的数据看起来像

作为测试的一部分,我使用Cassandra Python驱动程序尝试选择和删除Cassandra压力工具(Standard1,在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, ))
使用简单(未准备好的)语句时,需要从字符串创建缓冲区,以便编码器将其识别为blob类型

试试这个:

session.execute(query, (buffer(row.key),)
或者,绑定一个准备好的语句会隐式地执行此操作。

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

试试这个:

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

或者,绑定一个准备好的语句会隐式地完成这项工作。

对参与方来说有点晚了,但是您也可以通过使用十六进制编码并在
0x
前面加上前缀来直接转换它。例如:

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

有点晚了,但是您也可以直接通过十六进制编码和前缀
0x
来转换它。例如:

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