psycopg2 возвращает одинарные кавычки вместо double для json_agg

#python #json #postgresql #psycopg2

#python #json #postgresql #psycopg2

Вопрос:

Мне нужно получить данные json из базы данных (Python 3.8 / psycopg2 2.8.6 / PostgreSQL 12) с двойными кавычками, но пока они в одинарных кавычках:

 sql = "select json_agg(prices) FROM prices WHERE date >= (NOW() - INTERVAL '6 MONTH')"
connection = psycopg2.connect(host='localhost', database='products', user='postgres', password='123456')
cur = connection.cursor()
cur.execute(sql)
response = cur.fetchone()
return str(response)
  

Ответ (одинарные кавычки):
[{'id': 1, 'date': '2020-09-29T22:36:24.942066 03:00', 'price': 697.14, ...

Но когда я выполняю тот же запрос через pgAdmin, он заключен в двойные кавычки, как и ожидалось:

[{"id": 1, "date": "2020-09-29T22:36:24.942066 03:00", "price": 697.14, ...

Я что-то упустил?

PS Я знаю, что могу заменить его вручную, но я хочу найти лучшее решение.

Комментарии:

1. При извлечении jsonb psycopg2 превращает его для вас в объект python. Если вы хотите получить json, тогда import json и тогда return json.dumps(response) .

2. @MikeOrganek спасибо, это намного лучше, но добавляет дополнительный [] like [[{"id": 1,...]] (две скобки в начале и в конце вместо одной), поэтому мне просто нужно использовать return json.dumps(response[0])

3. Дело в том, что json.dumps возвращает строку. Это то, с чем вы можете работать?

4. Да, строка подходит для меня, так как это ответ от конечной точки flask

5. Вы можете использовать json_agg(prices)::text для преобразования выходных данных json в текст для передачи обратно в python в виде строки