Cassandra cqlengine不反映模型架构的变化 - 迁移

时间:2016-12-26 19:16:34

标签: python cassandra

我按照cassandra cqlengine教程。

import uuid
from cassandra.cqlengine import columns
from cassandra.cqlengine import connection
from datetime import datetime
from cassandra.cqlengine.management import sync_table
from cassandra.cqlengine.models import Model

class ExampleModel(Model):
    example_id      = columns.UUID(primary_key=True, default=uuid.uuid4)
    example_type    = columns.Integer(index=True)
    created_at      = columns.DateTime()
    description     = columns.Text(required=False)

connection.setup(['127.0.0.1'], "cqlengine", protocol_version=3)
sync_table(ExampleModel)

但是,当我更改模型中的字段时,如果我将字段描述从Text类型更改为Integer类型,然后执行sync_table,我不会看到更改反映在cassandra中的表模式中。怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

这里有两件事是错的:

  1. 从概念上讲,您正在尝试进行架构迁移。用于python的apache Cassandra驱动程序还没有真正支持模式迁移。快速查看this ticket将向您解释我的意思。 (注意:您可以在表格中添加新列,sync_table将起作用,您的新架构将会反映出来,但严格来说这不是ALTER操作。)

  2. 数据模型中的Cassandra数据类型转换必须遵循CQL类型兼容性,该兼容性定义为here。您尝试从Integer转换为Float的尝试不兼容。

  3. 到目前为止,使用不兼容类型更新架构的唯一解决方案是here。我对同一个here开了一个单独的讨论。