Как мне представить пользовательский тип Cassandra в модели Python в Cqlengine

У меня есть следующая схема таблицы, определенные в моем кластере Cassandra

CREATE TABLE users (
username text PRIMARY KEY,
creationdate bigint,
email text,
firstlogin boolean,
firstname text,
lastloggedin bigint,
lastname text,
lastprofileupdate bigint,
name text,
olduserid int,
profile frozen<profile_type>,
user_id uuid

и пользовательский тип, profile_type, как показано ниже...

CREATE TYPE profile_type (
birthdate timestamp,
gender text,
title text,
relationshipstatus text,
homecountry text,
currentcountry text,
timezone text,
profilepicture blob,
alternate_email text,
religion text,
interests list<text>,
cellphone text,
biography text
);

Как мне представить эту структуру как модель cqlengine? Я особенно заинтересован в представлении пользовательского типа, так как я не вижу каких-либо определений столбцов, чтобы представить такое? Мне тогда нужно сопоставить это вручную? Пока у меня есть это в Python....

class User(Model):
    username = columns.Text(primary_key=True)
    firstname = columns.Text(required=True)
    lastname = columns.Text(required=True)
    email = columns.Text(required=True)
    name = columns.Text(required=False)
    olduserid = columns.Integer()
    user_id = columns.UUID(default=uuid.uuid4)
    creationdate = columns.BigInt()

2 ответа

Решение

По-видимому, эта функция еще не поддерживается в cqlengine, и в ближайшем будущем планируется ее развитие. В настоящее время вернемся к использованию драйвера Python Cassandra, предоставляемого Datastax, чтобы это работало в коде. Я буду следить за тем, когда будет доступна реализация cqlengine, и расскажу здесь.

Поддержка UDT доступна с cqlengine, пожалуйста, обратитесь к этому

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

class address(UserType):
    street = Text()
    zipcode = Integer()

class users(Model):
    __keyspace__ = 'account'
    name = Text(primary_key=True)
    addr = UserDefinedType(address)

sync_table(users)

users.create(name="Joe", addr=address(street="Easy St.", zip=99999))
user = users.objects(name="Joe")[0]
print user.name, user.addr
# Joe {'street': Easy St., 'zipcode': None}
Другие вопросы по тегам