cqlengine multilpe键空间

时间:2015-05-19 20:35:52

标签: python cassandra cqlengine

我正在使用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可以安全查看吗?

由于

1 个答案:

答案 0 :(得分:2)

问题是陈旧的,希望这有助于其他人。

是的,第二种方法是正确的。 get_session()set_session()无效,因为它会检查是否设置了models.DEFAULT_KEYSPACE,并且只设置了新的密钥空间(如果未设置)。因此,要有效地更改密钥空间,您需要更改models.DEFAULT_KEYSPACE