如何为循环中的每一行数据添加列标题?

时间:2018-09-28 18:10:14

标签: python python-3.x

我正在使用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的新手,因此此帖子需要在格式,内容等方面进行改进,因此,欢迎任何反馈。

谢谢!

3 个答案:

答案 0 :(得分: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

如果格式化为具有一致间距的表很重要,请参见Printing Lists as Tabular Data

答案 1 :(得分:0)

如果您要手动添加列名,只需在for循环外打印列名即可。

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

答案 2 :(得分:0)

如果希望标题可用于每一行数据,请创建DictCursor。据我所知,最受欢迎的MySQL,Oracle和Postgres库都支持它。

然后您可以执行以下操作:

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

参考:littler