#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 в виде строки