Я использую 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, поэтому этому сообщению нужны улучшения в форматировании, контенте и т.д., Поэтому я приветствую любую обратную связь.
Спасибо!
Вы можете использовать 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
Если форматирование в виде таблицы с согласованным интервалом важно, см. Печать списков в виде табличных данных.
Если вы хотите, чтобы заголовки были доступны с каждой строкой данных, создайте 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
Ссылка: генератор
если вы добавляете имена столбцов вручную, просто напечатайте имена столбцов за пределами цикла for.
print("col1\tcol2\tcol3")
for row in rows:
print(row)
headers = [desc[0] for desc in cursor.description]
из PEP 249 - Спецификация API базы данных Python v2.0 Атрибуты курсора .cursor
. Просто нужно поместить его в другой список для согласованности.