2015-01-31 2 views
1

Я использую cqlengine в приложении Django, где Cassandra является вторичной базой данных.Запросы Cqlengine: как вернуть словарь?

В некоторых случаях мне нужно вручную объединить результаты запросов базы данных SQL и NoSQL.

Для SQL Я использую:

model_name.objects.all().values() 

вернуть словарь, а не объектов модели-экземпляра.

Но я не могу найти подходящие методы в: cqlengine.

Как новичок в python, я не знаю, как лучше всего реализовать эту функциональность в библиотеке cqlengine.

Возможно, у вас есть примеры кода программы, обеспечивающие это?

ответ

0

Мне нравится использовать генератор для цикла, как, например:

[dict(foo) for foo in Bar.objects.all()] 

Это возвращает словарь всех объектов и в зависимости от вашего кода базы позволит сделать пользовательские сериализации и десериализации.

+0

Большое спасибо! И если мне нужно получить не все поля, а только некоторые из них, и представить результат в виде словаря? Я нашел, как фильтровать поля, используя values_list(), но результат - это список. Есть ли другой способ? – Maria

+0

Я бы не рекомендовал использовать это, учитывая, что у CQLEngine есть собственные встроенные функции для обработки ... Я бы тоже не использовал values_list(). Прочитали ли вы официальную документацию перед использованием модуля? – mbeacom

2

Для этого есть встроенная функциональность cqlengine 0.12. Это за: CQLEngine Model Docs

Начиная с cqlengine 0.12 мы добавили поддержку для обработки экземпляров модели, таких как словари. Ниже приведены примеры.

class Person(Model): 
first_name = columns.Text() 
last_name = columns.Text() 

kevin = Person.create(first_name="Kevin", last_name="Deldycke") 
dict(kevin) # returns {'first_name': 'Kevin', 'last_name': 'Deldycke'} 
kevin['first_name'] # returns 'Kevin' 
kevin.keys() # returns ['first_name', 'last_name'] 
kevin.values() # returns ['Kevin', 'Deldycke'] 
kevin.items() # returns [('first_name', 'Kevin'), ('last_name', 'Deldycke')] 

kevin['first_name'] = 'KEVIN5000' # changes the models first name 

Таким образом, чтобы ответить на ваш вопрос ... Вы просто хотите сделать основной запрос, получить объекты и что, преобразовать его в Словаре:

dict(your_returned_model_object) 

You теперь могут обращаться к возвращенным объектам в виде словаря, как это указано выше.