cqlengin множественные пространства ключей

Я использую cassandra из python 3.4.0 с 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 безопасно проверить это?

Спасибо


person trilopin    schedule 19.05.2015    source источник


Ответы (1)


Вопрос старый, надеюсь, это поможет кому-то еще.

Да, второй подход правильный. get_session() и set_session() не действуют, потому что он проверяет, установлено ли models.DEFAULT_KEYSPACE, и устанавливает новое пространство ключей, только если оно не установлено. Итак, чтобы эффективно изменить пространство ключей, вам нужно изменить models.DEFAULT_KEYSPACE

person TheGeorgeous    schedule 24.07.2015