Соединение cqlengine set_session() не обрабатывает различные пространства ключей
У меня есть следующий код
from cassandra.cqlengine import connection
#inside a flask function
session = get_session_for_keyspace(keyspace)
connection.set_session(session)
object_list = ModelTable.objects.filter(....)
Но хотя сессия "указывает" на исправление пространства клавиш, выбор, выполняемый фильтром в ModelTable, использует старое пространство клавиш, которое было определено несколькими строками ранее. Как я могу заставить Модели использовать сеанс, который я устанавливаю каждый раз для соединения?
1 ответ
Apostolos, он использует ваш сеанс, однако пространство ключей по умолчанию устанавливается в ПЕРВЫЙ раз, когда вызывается метод set_session. Посмотрите на этот код здесь, в cqlengine, класс соединения. Я предполагаю, что ваша модель не имеет определенного пространства ключей и поэтому использует стандартное.
https://github.com/datastax/python-driver/blob/master/cassandra/cqlengine/connection.py
Если вы используете другую модель в разных ключевых пространствах и просто пытаетесь переключить класс соединения. Вы можете определить пространство клавиш по умолчанию в вашей модели, которое также должно работать в этом конкретном случае.
Ваша модель должна переопределить это значение на уровне класса. https://github.com/datastax/python-driver/blob/master/cassandra/cqlengine/models.py
Использование одной и той же модели в нескольких пространствах клавиш cassandra является своего рода борьбой с тем, как в настоящее время реализован cqlengine. Я бы порекомендовал вам взглянуть на опускание до базового драйвера и использовать его, если возможно, в этом случае.