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