我正在使用 python 3.4.0 中的 cassandra 和 cassandra-driver 2.5.0 (和 cqlengine 模型)。
应用程序数据分布在:一个用于管理的键空间和每个用户一个键空间。我需要查询两个键空间:master+custom。
我编写了一个用于键空间切换的小类,如下所示:
with keyspace(new_keyspace):
#do stuff with new_keyspace
#do stuff with previous keyspace
我的第一个版本是:
class keyspace(object):
def __init__(self, new_keyspace):
self.new_keyspace = new_keyspace
self.old_keyspace = get_session().keyspace
def __enter__(self):
session = get_session()
session.set_keyspace()
connection.set_session(session)
def __exit__(self, type, value, traceback):
session = get_session()
session.set_keyspace(self.old_keyspace)
connection.set_session(session)
而且根本不起作用。我用以下方式重新编码了课程:
class keyspace(object):
def __init__(self, new_keyspace):
self.new_keyspace = new_keyspace
self.old_keyspace = cassandra.cqlengine.models.DEFAULT_KEYSPACE
def __enter__(self):
cassandra.cqlengine.models.DEFAULT_KEYSPACE = self.new_keyspace
def __exit__(self, type, value, traceback):
cassandra.cqlengine.models.DEFAULT_KEYSPACE = self.old_keyspace
最后一个代码有效,但使用 DEFAULT_KEYSPACE 时我感到不安全。
为什么get_session()、set_session没有效果?
cassandra.cqlengine.models.DEFAULT_KEYSPACE
检查这个安全吗?
谢谢