本文介绍了cqlengine multilpe键空间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用cassandra从python 3.4.0与cassandra驱动程序2.5.0(和cqlengine模型)。

I am using cassandra from python 3.4.0 with cassandra-driver 2.5.0 (and cqlengine models) .

应用程序数据分布在:用于管理的一个键空间和每个用户一个键空间。我需要查询两个键空间:master + custom。

App data are distributed in: one keyspace for management and one keyspace per user. i need to query two keyspaces: master+custom.

我已经编写了一个小类用于键空间切换,如下所示:

I have coded a tiny class for keyspace switching used like this:

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)

并不工作。
我已经重新编码类:

And does not work at all.I have recoded class with:

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时会感到不安全。

Last code works, but i feel insecure when use DEFAULT_KEYSPACE.

为什么get_session(),set_session没有效果?

Why get_session(), set_session has no effect?

cassandra.cqlengine.models.DEFAULT_KEYSPACE

感谢

推荐答案

是的,第二种方法是正确的。 get_session() set_session()没有效果,因为它检查 models.DEFAULT_KEYSPACE ,如果未设置,只设置新的键空间。因此,要有效更改键空间,您需要更改 models.DEFAULT_KEYSPACE

Yes the second approach is correct. get_session() and set_session() has no effect because it checks if models.DEFAULT_KEYSPACE is set and only sets the new keyspace if it is not set. So to effectively change the keyspace you need to change models.DEFAULT_KEYSPACE

这篇关于cqlengine multilpe键空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-04 23:50