当模型包含UDT集时,Cassandra python驱动程序ORM崩溃

时间:2017-05-03 16:11:18

标签: python-3.x orm cassandra

我刚刚开始在python 3上使用Cassandra db。

我有一个模型女巫包含一组用户定义的类型:

# model.py
import uuid

from datetime import datetime
from cassandra.cqlengine import columns
from cassandra.cqlengine.models import Model
from cassandra.cqlengine.usertype import UserType

class Hobby(UserType):
    priority = columns.Integer()
    hobby = columns.Text()

    def __hash__(self):
        return hash(str(self.__class__) + ": " + str(self.__dict__))


class Person(Model):
    __keyspace__ = 'tracking'

    id = columns.UUID(primary_key=True, default=uuid.uuid4)
    birth_date = columns.DateTime(default=datetime.now())
    hobbies = columns.Set(columns.UserDefinedType(Hobby))

文件我正在测试,看起来像这样:

#main.py
from settings import auth_provider
from models import *

from cassandra.cqlengine import connection
from cassandra.cqlengine.management import sync_table, sync_type

connection.setup(['127.0.0.1'], 'tracking', auth_provider=auth_provider, protocol_version=3)
sync_type('tracking', Hobby)
sync_table(Person)

Person.create(hobbies=[Hobby(priority=1, hobby='Coding'), ])
# Person.create(hobbies=[Hobby(priority=1, hobby='Coding'), Hobby(priority=2, hobby='Testing')])

for i in Person.objects().all():
    print(dict(i))

现在,如果我将第一个 Person.create 与一个爱好一起使用,那么数据就可以了。

但是,如果我使用第二个(注释掉的) Person.create 和两个爱好,我会收到以下异常:

cassandra.DriverException: Failed decoding result column "hobbies" of type set<frozen<hobby>>: '<' not supported between instances of 'Hobby' and 'Hobby'

有关解决方法的任何建议,我做得对吗?

1 个答案:

答案 0 :(得分:1)

好的,所以我实际上花了很多时间阅读我没有尝试过的明显的文档,将Person模型类型的爱好改为List而不是Set。

hobbies = columns.List(columns.UserDefinedType(Hobby))解决问题。