首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >blobs问题(Cassandra驱动程序、Python)

blobs问题(Cassandra驱动程序、Python)
EN

Stack Overflow用户
提问于 2016-10-26 17:29:33
回答 2查看 1.2K关注 0票数 1

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

我的方法是提取行的(主键),然后运行一个循环来删除基于它的行。

我面临的问题是,看起来Cassandra驱动程序将blob(十六进制字节)转换为字符串,所以当我试图将其传递给delete语句时,它会失败,并显示"cannot parse 'XXXXXX‘as hex bytes“。

CQLSH上的表中的数据看起来像"0x303038333830343432",而下面的select将键提取为,即'069672027‘。

有没有办法防止十六进制字节被转换成字符串?还有其他我应该使用的方法吗?

谢谢!

代码语言:javascript
复制
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, ))
EN

回答 2

Stack Overflow用户

发布于 2016-10-26 23:38:12

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

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

试试这个:

代码语言:javascript
复制
session.execute(query, (buffer(row.key),)

或者,绑定预准备语句将隐式地执行此操作。

票数 0
EN

Stack Overflow用户

发布于 2018-07-14 07:02:43

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

代码语言:javascript
复制
'0x{}'.format(row.key.encode('hex'))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40258525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档