下面的代码将接受一个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()
答案 0 :(得分: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)