CqlEngine - sync_table() KeyError: 'cqlengine'
CqlEngine - sync_table() KeyError: 'cqlengine'
我刚刚开始使用 cqlengine python 中的 Cassandra。
我尝试遵循此 link 并尝试 运行 此脚本:
from cqlengine import columns
from cqlengine import Model
from cqlengine import connection
from cqlengine.management import sync_table
import uuid
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')
sync_table(ExampleModel)
但是它抛出了这个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/zopper/Desktop/django-cassandra/local/lib/python2.7/site-packages/cqlengine/management.py", line 92, in sync_table
keyspace = cluster.metadata.keyspaces[ks_name]
KeyError: 'cqlengine'
我的 pip freeze
是:
Django==1.7.3
argparse==1.2.1
blist==1.3.6
cassandra-driver==2.1.3
cqlengine==0.21.0
django-cassandra-engine==0.2.1
djangotoolbox==1.6.2
futures==2.2.0
six==1.9.0
wsgiref==0.1.2
请帮助我理解并解决这个问题。
谢谢。
Edit:create_missing_keyspace
在 cqlengine 0.21 中被忽略,但在 0.20 中没有。尝试版本 < 0.21 的 cqlengine 或手动创建(见下文)。
创建键空间like this:
cqlengine.management.create_keyspace("cqlengine", replication_factor=1, strategy_class="SimpleStrategy")
可用策略有SimpleStrategy
and NetworkTopologyStrategy
。
我找不到 0.21 的更新文档,所以我检查了 the source。这是 0.21 中 create_keyspace
的声明:
def create_keyspace(name, strategy_class, replication_factor, durable_writes=True, **replication_values):
"""
creates a keyspace
:param name: name of keyspace to create
:param strategy_class: keyspace replication strategy class
:param replication_factor: keyspace replication factor
:param durable_writes: 1.2 only, write log is bypassed if set to False
:param **replication_values: 1.2 only, additional values to ad to the replication data map
"""
这在我这边被忽略了 - 我现在正在修复它。 create_missing_keyspace 很少会 "do the right thing",修复使用错误参数创建的键空间非常困难且耗时。您现在必须使用所需参数显式创建键空间。
我刚刚开始使用 cqlengine python 中的 Cassandra。
我尝试遵循此 link 并尝试 运行 此脚本:
from cqlengine import columns
from cqlengine import Model
from cqlengine import connection
from cqlengine.management import sync_table
import uuid
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')
sync_table(ExampleModel)
但是它抛出了这个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/zopper/Desktop/django-cassandra/local/lib/python2.7/site-packages/cqlengine/management.py", line 92, in sync_table
keyspace = cluster.metadata.keyspaces[ks_name]
KeyError: 'cqlengine'
我的 pip freeze
是:
Django==1.7.3
argparse==1.2.1
blist==1.3.6
cassandra-driver==2.1.3
cqlengine==0.21.0
django-cassandra-engine==0.2.1
djangotoolbox==1.6.2
futures==2.2.0
six==1.9.0
wsgiref==0.1.2
请帮助我理解并解决这个问题。 谢谢。
Edit:create_missing_keyspace
在 cqlengine 0.21 中被忽略,但在 0.20 中没有。尝试版本 < 0.21 的 cqlengine 或手动创建(见下文)。
创建键空间like this:
cqlengine.management.create_keyspace("cqlengine", replication_factor=1, strategy_class="SimpleStrategy")
可用策略有SimpleStrategy
and NetworkTopologyStrategy
。
我找不到 0.21 的更新文档,所以我检查了 the source。这是 0.21 中 create_keyspace
的声明:
def create_keyspace(name, strategy_class, replication_factor, durable_writes=True, **replication_values):
"""
creates a keyspace
:param name: name of keyspace to create
:param strategy_class: keyspace replication strategy class
:param replication_factor: keyspace replication factor
:param durable_writes: 1.2 only, write log is bypassed if set to False
:param **replication_values: 1.2 only, additional values to ad to the replication data map
"""
这在我这边被忽略了 - 我现在正在修复它。 create_missing_keyspace 很少会 "do the right thing",修复使用错误参数创建的键空间非常困难且耗时。您现在必须使用所需参数显式创建键空间。