Cassandra 1.2使用Python和cql库插入/更新blob列类型

Ser*_*rán 6 python cql cassandra

介绍

我在Cassandra 1.2列系列上有一个blob列,该表定义如下:

CREATE TABLE objects (
   id        text,
   obj       blob,
   PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)

问题:

问题是,当我需要使用cql库从Python插入/更新blob列时,我需要对列进行16位编码,如下所示:

import cPickle
import cql
...
def save_object(connection, obj):
    object['id']  = obj['id']
    object['obj'] = cPickle.dumps(obj).encode("hex")
    cql_statement = "INSERT INTO objects (id, obj) values (:id, :obj)"
    cursor = connection.cursor()
    cursor.execute(cql_statement, object)
Run Code Online (Sandbox Code Playgroud)

问题:

有没有办法在不使用对象的基本16编码(字符串)的情况下执行此查询?这样做的原因是减少了通过线路而不是普通字节发送基本16编码字符串的开销.

预先感谢!

Boy*_*nux 1

Base64 还是 HEX?

如果您的问题不是编码为 base64 是的,您可以,但是您必须以十六进制格式将数据提供到 CQL 中。

如果你的问题没有转换成十六进制,不,这是不可能的。

正如CQL 文档中定义的 blob

blob 常量是由 0xX+ 定义的十六进制数,其中 hex 是十六进制字符,例如 [0-9a-fA-F]。例如,0xcafe。

所以这显然意味着您需要以十六进制格式发送数据。