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

标签 mysql python-2.7 xlsxwriter

下面的代码将接受一个 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()

最佳答案

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

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)

关于mysql - 如何使用列名将 SQL 查询导出到 Excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49022489/

相关文章:

python - 尝试在 Python 2.7 中导入任何模块时,如何解决 "NameError: name ' null' 未定义”错误

python - 如何根据不同条件将数据写入单个工作簿的多张表中?

php - 检查表是否是新创建的或者不在数据库中

sql - Mysql 查询返回带有 in 和 find_int_set 的重复条目

mysql - 使用rsync备份MySQL

python - RabbitMQ:Pika 连接因对等错误而重置

mysql - 其中whereDate在 Eloquent

Python heapy 显示持续的内存使用情况,尽管 60GB 的内存在 10 分钟内耗尽

python - 扩展 xlsxwriter.Worksheet() 类

python - pandas xlsxwriter,格式表标题 - 不是工作表标题