2013-05-27 42 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。

因此,這顯然意味着您需要以十六進制格式發送數據。