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