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