Как запрашивать строки по первичному ключу BLOB-объектов из Cassandra с помощью Python cqlengine

Моя таблица Cassandra выглядит так:

uid                     | flwuid                     | tuuid
------------------------+----------------------------+--------------------------------------
0x50f893bf620d628f0500 | 0x527ce3c3c5ebc4dd7e8b4567 | 1e970c24-488d-11e3-b19a-7054d219d35c
0x505a31a507b8d04b0005 | 0x526a66cbc5ebc4d3708b456c | 6081f230-4797-11e3-b9af-7054d219d35c
0x505a31a507b845000005 | 0x527ce3c3c5ebc4dd7e8b4567 | 9da514bc-4878-11e3-bcb1-7054d219d35c
0x51ee6cef6cbf7679f7a0 | 0x524bfd0dc5ebc486738b4567 | 6bdf89c6-4b93-11e3-a8a0-7054d219d35c
0x51ee160a6cbf7679f7a0 | 0x526a7149c5ebc494708b456c | 8e8a1c4c-45fe-11e3-9b35-7054d219d35c

У меня есть модель cqlengine:

class Followers(Model):
    uid = cqlengine.Bytes(primary_key=True)
    flwuid = cqlengine.Bytes(primary_key=True)
    tuuid = cqlengine.TimeUUID()

Чтобы получить все строки с uid = 0x50f893bf620d628f0500, я пытаюсь сделать это:

Followers.objects(uid='0x50f893bf620d628f0500')

но получаю исключение:

CQLEngineException: Bad Request: Invalid STRING constant (3078353066383933626636323064363238663035303030303061) for uid of type blob

Как указать правильное значение BLOB-объекта для запроса cqlengine?

Кассандра 2.0.1, cqlengine 0.9.1.

Заранее спасибо.


person Vitaly Chirkov    schedule 15.11.2013    source источник


Ответы (1)


Посмотрите здесь и здесь.

Причина в том, что Cassandra 2.0 не поддерживает запись или запрос значения большого двоичного объекта, представленного в виде строки Python. Вместо этого вы должны использовать тип bytearray.

person Anton Sergeev    schedule 15.11.2013
comment
Могу ли я справиться с этим без исправления cqlengine? - person Vitaly Chirkov; 15.11.2013
comment
Я думаю, вы могли бы использовать python-cql для своего бизнеса. github.com/pcmanus/python-cql - person Anton Sergeev; 15.11.2013