cqlengine многопользовательские клавиши

Я использую cassandra из python 3.4.0 с cassandra-driver 2.5.0 (и модели cqlengine) .

Данные приложения распределяются в: одно пространство ключей для управления и одно пространство ключей для пользователя. Мне нужно запросить два пространства ключей: мастер + пользовательские.

Я кодировал крошечный класс для переключения между клавишами:

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 ответ

Решение

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

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

Другие вопросы по тегам