Соединение 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. Я бы порекомендовал вам взглянуть на опускание до базового драйвера и использовать его, если возможно, в этом случае.

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