Как напечатать результаты запроса в Python, включая имена столбцов - PullRequest
2 голосов
/ 02 февраля 2020

При печати PostgreSQL результатов запроса я вижу только значения результатов, я хотел бы видеть имя столбца вместе со значениями результатов

 postgreSQL_select_Query = "SELECT epic,timestamp FROM market_data_historic s1 WHERE timestamp = (SELECT MAX(timestamp) FROM market_data_historic s2 WHERE s1.epic = s2.epic)"
    cursor.execute(postgreSQL_select_Query)
    # Close the connection
    result=(cursor.fetchall())
    for row in result:
        print (row)

Это результат, который я получаю:

('CC.D.LCO.USS.IP', datetime.datetime(2019, 11, 13, 22, 0))
('IX.D.DAX.DAILY.IP', datetime.datetime(2019, 7, 23, 4, 0))
('KB.D.ELECTY.DAILY.IP', datetime.datetime(2020, 1, 24, 16, 0))
('CS.D.ALUMINIUM.TODAY.IP', datetime.datetime(2019, 7, 23, 1, 0))
('CS.D.NZDCAD.TODAY.IP', datetime.datetime(2020, 1, 24, 21, 0))
('CS.D.CADCNH.TODAY.IP', datetime.datetime(2020, 1, 16, 8, 0))

Как мне сделать так:

(epic:'CC.D.LCO.USS.IP',timestamp: datetime.datetime(2019, 11, 13, 22, 0))
(epic:'IX.D.DAX.DAILY.IP',timestamp: datetime.datetime(2019, 7, 23, 4, 0))
(epic:'KB.D.ELECTY.DAILY.IP',timestamp: datetime.datetime(2020, 1, 24, 16, 0))
(epic:'CS.D.ALUMINIUM.TODAY.IP',timestamp: datetime.datetime(2019, 7, 23, 1, 0))
(epic:'CS.D.NZDCAD.TODAY.IP',timestamp: datetime.datetime(2020, 1, 24, 21, 0))
(epic:'CS.D.CADCNH.TODAY.IP',timestamp: datetime.datetime(2020, 1, 16, 8, 0))

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Используйте атрибут cursor.description для получения имен столбцов и преобразования результатов в словари:

result = cursor.fetchall()
columns = [desc[0] for desc in cursor.description]
for row in result:
    print (dict(zip(columns, row)))

В качестве альтернативы вы можете использовать Реальный курсор словаря или Именованный кортеж курсора.

См. Также DictCursor против RealDictCursor.

0 голосов
/ 02 февраля 2020

Попробуйте атрибут description cursor:

Атрибут только для чтения, описывающий результат запроса. Это последовательность Column экземпляров, каждый из которых описывает один столбец результата по порядку. Атрибут None для операций, которые не возвращают строки или если у курсора еще не было операции, вызванной с помощью методов execute*().

Для совместимости с DB-API любой объект может быть распакован как последовательность из 7 элементов: атрибуты, перенастроенные таким образом, следующие. Для получения дополнительной информации и других доступных атрибутов см. Документацию Column.

  • name: имя возвращаемого столбца.
  • type_code: OID PostgreSQL столбец.
  • display_size: фактическая длина столбца в байтах.
  • internal_size: размер в байтах столбца, связанного с этим столбцом на сервере.
  • precision: общее количество значащих цифр в столбцах типа NUMERIC. None для других типов.
  • scale: количество десятичных цифр в дробной части в столбцах типа NUMERIC. None для других типов.
  • null_ok: всегда None, поскольку его нелегко получить из libpq.
...