#python-3.x #postgresql #psycopg2
#python-3.x #postgresql #psycopg2
Вопрос:
В psycopg2 есть ли способ для курсора возвращать результаты в виде строки, а не в формате JSON (или string), а не в виде объекта dictionary?
Пример
# connect to database
conn = psycopg2.connect(host=host, port=port, user=usr, password=passwd, dbname=dbn)
cur = conn.cursor(cursor_factory=RealDictCursor)
# CREATE table and INSERT
cur.execute("CREATE TABLE t1(c char, i int);")
cur.execute("INSERT INTO t1(c, i) VALUES ('a', 1), ('b', 2), ('c', 3)");
# Execute query
cur.execute("SELECT COUNT(*) FROM t1;")
output1 = cur.fetchall()
cur.execute("SELECT * FROM t1;")
output2 = cur.fetchall()
Ожидать — Список объектов, отформатированных в виде JSON или строк
output1 - ['{"count": 3}']
output2 - ['{"c": "a", "i": 1}', '{"c": "b", "i": 2}', '{"c": "c", "i": 3}']
Фактический — Список объектов словаря
output1 - [{'count': 3}]
output2 - [{'c': 'a', 'i': 1}, {'c': 'b', 'i': 2}, {'c': 'c', 'i': 3}]
В настоящее время я использую модуль JSON для преобразования каждого объекта в JSON, но мне интересно, есть ли более простой способ (т. Е. внутри psycopg2).
Комментарии:
1.
output1 = json.dumps(cur.fetchall())
недостаточно просто?2. @klin, я привел простой пример, но реальная ситуация содержит объекты datetime.datetime, поэтому, если я использую ваш метод, я получаю ошибку. Это означает, что для использования функции json я должен обновить список, а затем преобразовать JSON…
Ответ №1:
Ваш текущий способ отображения вашего представления в вашем приложении правильный, и вы должны продолжать это делать.
В принципе, есть способ отобразить ваше представление в формате JSON внутри PostgreSQL, но делать это не имело бы никакого смысла, поскольку визуализация ваших представлений — это самое большее, что вы можете получить от того, какую роль база данных будет играть в вашей архитектуре.
Комментарии:
1. И, кстати, @OShadmon, я хочу поблагодарить вас за то, что вы воспользовались советом по архитектуре. Способность видеть собственные ментальные конструкции с разных и конфликтующих точек зрения — это то, что отличает мужчин от мальчиков и женщин от девочек.