У меня есть метод извлечения всех моих данных из базы данных cassandra. Проблема, с которой я столкнулся, заключается в том, что он возвращает объект cassandra, а я хочу json. Я пробовал несколько решений, но ни одно из них не работает. Я пробовал json.dumps()
и loads
, но получаю сообщение об ошибке object is not JSON serializable
Какие-либо предложения?
Мой код:
@api.route('/getAllApps')
class getAllApps(Resource):
@api.marshal_list_with(model)
def get(self):
return ar.getAllApplications(), 200
#if ar.getAllApplications is None:
#return 204
def getAllApplications(*args):
for data in AddApplication.objects():
print(data, data.address, data.gocd, data.jenkins, data.nodes, data.serverDependencies)
return data
пожалуйста, не пытайтесь получить все данные от Кассандры! Вы убьете свой кластер, если у вас там относительно большие данные
По умолчанию cassandra возвращает данные запроса в формате кортежа. Что вам нужно сделать, так это изменить конфигурацию cassandra, чтобы получить ее в формате dict.
import json
from cassandra.query import ordered_dict_factory
cluster = Cluster(['127.0.0.1'],auth_provider=auth_provider)
session = cluster.connect("keyspace")
session.row_factory = ordered_dict_factory
#query result
rows = self.session.execute_async("SELECT * FROM " + table)
rows = self.return_result(rows, 'data')
data = rows.result()
# dump in json
json.dumps(data)
Вот еще один способ, проверьте поддержку выберите-json:
SELECT JSON a, ttl(b) FROM ...
Спасибо! Работал отлично.
Вам нужно пройти
object_hook
вjson.loads
.