如何使用列名将SQL查询导出到Excel

问题描述 投票:0回答:1

下面的代码将接受一个sql文件,并使用xlsxwriter将数据导出到excel,但我似乎无法使用列名称(标题)导出它。我可以让它在屏幕上显示列名,但不能将它作为第一行添加到excel文件中。

我注意到如果我改为使用DictCursor而不是SSCursor,那么excel文件将只填充重复多次的列名。

import MySQLdb
import sys
from xlsxwriter.workbook import Workbook
import MySQLdb.cursors as cursors

reload(sys)  
sys.setdefaultencoding('ISO-8859-1')

sql_file = sys.argv[1]
target_file = sys.argv[2]
target_sheet = sys.argv[3]

if sys.version_info[0] == 2:  # Not named on 2.6
    access = 'wb'
    kwargs = {}
else:
    access = 'wt'
    kwargs = {'newline':''}

workbook = Workbook(target_file)
worksheet = workbook.add_worksheet(target_sheet)

conn = MySQLdb.connect(host="localhost",
                     user="username",
                     passwd="password",
                     db="database"
                     , compress=1
                     )

with open(sql_file, 'r') as sql_script:
    sql_string = sql_script.read()


cur = conn.cursor(cursorclass=MySQLdb.cursors.SSCursor)
#print sql_string
cur.execute(sql_string)
results = cur.fetchall()

print ([i[0] for i in cur.description])

cur.close()
conn.close()

for r, row in enumerate(results):
    for c, col in enumerate(row):
        worksheet.write(r, c, col)

workbook.close()
mysql python-2.7 xlsxwriter
1个回答
1
投票

您可以获取列名并将其写入第一行,然后继续编写行值。

cols = [i[0] for i in cur.description]
for c, col in enumerate(cols):
    worksheet.write(0, c, col)

用于写行值:

for r, row in enumerate(results):
    for c, col in enumerate(row):
        worksheet.write(r+1, c, col)
© www.soinside.com 2019 - 2024. All rights reserved.