Cassandra. Значение столбца по умолчанию

Следующий пример из драйвера Python Cassandra

class Users(Model):
    username = columns.Text(index=True, required=True)
    user_id = columns.UUID(index=True, default=uuid.uuid4)
    email = columns.Text(primary_key=True, required=True)
    passwd = columns.Text()
    salt = columns.Text()

И создание объекта следующим образом:

u = Users()
u.username = 'admin'
u.email = 'test@test.com'
u.password = u'test'   #This is property with setter
Users.create(**dict(u))

В этом случае мы получаем user_id:None вместо user_id:uuid.uuid4 и соответствующая ошибка.

Как сделать default = uuid.uuid4 работать с меньшим количеством боли?

UPD Я думаю, это вызвано переопределением to_database метод в столбце UUID. Который конфликтует с базой to_database метод.

UPD2 Похоже на плохой случай. Ошибка происходит на шаге **dict(u)

Решение:

d = dict(u) 
del d['column_with_default_value']
Users.create(**d)

1 ответ

Решение

Вы делаете гораздо больше работы, чем вам нужно. Учитывая вашу таблицу, вот как вы вставляете:

Users.create(username="admin", email="test@test.com", passwd="test")

Я подтвердил это здесь:

In [16]: Users.create(username="admin", email="test@test.com", passwd="test") Out[16]: Users(username='admin', user_id=UUID('183d542d-c469-448d-9d14-d3614f727cef'), email='test@test.com', passwd='test', salt=None)

Другие вопросы по тегам