Как добавить заголовки столбцов для каждой строки данных в цикле?

1

Я использую Python3.6.

Пример таблицы базы данных:

column1 . .column2  . .column3

....10    ...........20..............30

....100  .......     200.............300

Код:

# extracts all data for the rows without the column names
rows=cursor.fetchall()

for row in rows:
    print(row)

  10   20   30  
  100  200  300

Как добавить имена столбцов вручную в этот цикл, чтобы он включался в вывод?

Я новичок в stackoverflow, поэтому этому сообщению нужны улучшения в форматировании, контенте и т.д., Поэтому я приветствую любую обратную связь.

Спасибо!

Теги:
python-3.x

3 ответа

1

Вы можете использовать cursor.description для извлечения заголовков, а затем итерации заголовков и данных через itertools.chain:

from itertools import chain
from operator import itemgetter

headers = [list(map(itemgetter(0), cursor.description))]
rows = cursor.fetchall()

for row in chain(headers, rows):
    print(*row)

column1 column2 column3
10 20 30
100 200 300

Если форматирование в виде таблицы с согласованным интервалом важно, см. Печать списков в виде табличных данных.

  • 0
    headers = [desc[0] for desc in cursor.description] из PEP 249 - Спецификация API базы данных Python v2.0 Атрибуты курсора .
  • 1
    @ StevenRumbalski, спасибо, обновил. Я не был знаком с cursor . Просто нужно поместить его в другой список для согласованности.
0

Если вы хотите, чтобы заголовки были доступны с каждой строкой данных, создайте DictCursor. Насколько мне известно, большинство популярных MySQL, Oracle, Postgres libs поддерживают его.

Тогда вы можете сделать это:

conn = MySQLdb.connect(host,port,user,passwd,db)
cursor = van.cursor(MySQLdb.cursors.DictCursor)
cursor.execute("SELECT * FROM table;")

# Avoid doing fetchall(). If your query resukt is big enough, it can even make your program run out of available memory of the system.
#rows=cursor.fetchall()

#Alternatively, iterate over the cursor itself, which is a generator

for row in cursor:
    print row

Ссылка: генератор

0

если вы добавляете имена столбцов вручную, просто напечатайте имена столбцов за пределами цикла for.

print("col1\tcol2\tcol3")
for row in rows:
   print(row)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню