2013-05-27 43 views
6

简介卡桑德拉1.2插入/更新使用Python BLOB列类型和CQL库

我有一个卡桑德拉1.2列族BLOB列,该表被定义如下:

CREATE TABLE objects (
    id  text, 
    obj  blob, 
    PRIMARY KEY (id) 
); 

问题:

问题是,当我需要从Python使用cql库插入/更新blob列时,我需要基于16编码内容像这样的列的S:

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) 

的问题是:

是否有不使用对象的基16编码(字符串)执行这个查询的方法吗?这样做的原因是为了减少通过线路而不是普通字节发送基本16编码字符串的开销。

提前致谢!

回答

1

Base64 or HEX?

如果你的问题没有编码到base64是的,你可以,但是你必须提供你的数据到十六进制格式的CQL。

如果你的问题没有转化为HEX,那么这是不可能的。

为BLOB在CQL documentation

BLOB的常数定义是由0XX +其中六角是一个十六进制字符,例如所定义的十六进制数[0-9A-FA-F]。例如,0xcafe。

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