我正在使用python 3.4.0中的cassandra和cassandra-driver 2.5.0(以及cqlengine模型)。
App数据分布在:一个用于管理的键空间和一个用户的一个键空间。我需要查询两个键空间: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
可以安全查看吗?
由于
答案 0 :(得分:2)
问题是陈旧的,希望这有助于其他人。
是的,第二种方法是正确的。 get_session()
和set_session()
无效,因为它会检查是否设置了models.DEFAULT_KEYSPACE
,并且只设置了新的密钥空间(如果未设置)。因此,要有效地更改密钥空间,您需要更改models.DEFAULT_KEYSPACE