cqlengine multilpe keyspaces

拥有回忆 提交于 2019-12-08 03:49:08

问题


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

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

My first version was:

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

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

Why get_session(), set_session has no effect?

is cassandra.cqlengine.models.DEFAULT_KEYSPACE safe for check this?

Thanks


回答1:


The question is old, hope this helps someone else.

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



来源:https://stackoverflow.com/questions/30335649/cqlengine-multilpe-keyspaces

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!