作为测试的一部分,我使用Cassandra Python驱动程序来尝试选择和删除由Cassandra stress工具(Keyspace1上的Standard1)生成的表中的所有行。Standard1由几个blob列组成。
我的方法是提取行的(主键),然后运行一个循环来删除基于它的行。
我面临的问题是,看起来Cassandra驱动程序将blob(十六进制字节)转换为字符串,所以当我试图将其传递给delete语句时,它会失败,并显示"cannot parse 'XXXXXX‘as hex bytes“。
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, ))
发布于 2016-10-26 23:38:12
在使用简单(未准备的)语句时,您需要从字符串创建一个缓冲区,以便编码器将其识别为blob类型。
http://datastax.github.io/python-driver/getting_started.html#type-conversions
试试这个:
session.execute(query, (buffer(row.key),)
或者,绑定预准备语句将隐式地执行此操作。
发布于 2018-07-14 07:02:43
有点晚了,但您也可以通过十六进制编码和前缀0x
直接转换它。例如:
'0x{}'.format(row.key.encode('hex'))
https://stackoverflow.com/questions/40258525
复制相似问题