В (python3) psycopg2 возвращает результаты в виде строки, а не dict - PullRequest
0 голосов
/ 11 марта 2019

В psycopg2 есть ли способ для курсора возвращать результаты в виде строки, а не в формате JSON (или строки), а не в качестве объекта словаря?

Пример

# 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}']

Actual - Список объектов словаря

output1 - [{'count': 3}]
output2 - [{'c': 'a', 'i': 1}, {'c': 'b', 'i': 2}, {'c': 'c', 'i': 3}]

В настоящее время я использую модуль JSON для преобразования каждого объекта в JSON, но мне интересно, есть ли более простой способ (например, внутри psycopg2).

1 Ответ

1 голос
/ 11 марта 2019

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

В принципе, существует способ визуализации вашего представления в виде JSON внутри PostgreSQL, но делать это не имеет никакого смысла, поскольку рендеринг ваших представлений является наиболее далеким из той роли, которую играет роль базы данных в вашем архитектура.

...