【问题标题】:xlsxwriter error - Trying to write SQL output to excel sheetxlsxwriter 错误 - 尝试将 SQL 输出写入 Excel 工作表
【发布时间】:2019-02-23 09:30:56
【问题描述】:

我正在尝试使用 XLSXwriter 模块将 SQL 查询的输出写入 excel。

dwh_cur.execute("""select count (*) from sales where created_at = current_date - 1""")
sales = dwh_cur.fetchall()
worksheet1.write('A1', 'Sale ID')

row = 1
col = 0

for elm1 in sales:
    worksheet1.write(row, col, elm1)
    row += 1

得到一个错误:

TypeError: float() argument must be a string or a number, not 'tuple'

下面是我要写入 excel 文件的数据

Sale_ID
1001
1002
1003
1004
1005

谁能帮忙看看我哪里出错了。谢谢..

【问题讨论】:

  • 错误很明显。您是否尝试过在循环中打印 elm1 并查看输出是什么?
  • 打印出elm1,你就会看到问题所在。你期望它是一个数字,但它不是,它是一个 1 元组。从数据库中获取行时,每行返回一个元组。即使查询中只有一列。
  • “任何人都可以帮助我知道我哪里出错了”实际上在尝试自己调试之前在这里发布已经是错误的。错误消息相当清楚,跟踪代码(使用打印语句或步进调试器)将在几分钟内解决问题。

标签: python xlsxwriter


【解决方案1】:

dwh_cur.fetchall() 正在返回一个元组列表,可能是:

[(1001,), (1002,)]

考虑到这一点,您应该将单元格编写如下:

dwh_cur.execute("""select count (*) from sales where created_at = current_date - 1""")
sales = dwh_cur.fetchall()
worksheet1.write('A1', 'Sale ID')

row = 1
col = 0

for elm1 in sales:
    worksheet1.write(row, col, elm1[0])
    row += 1

您还可以利用 Python 的 enumerate() 函数自动为您提供行号:

dwh_cur.execute("""select count (*) from sales where created_at = current_date - 1""")
sales = dwh_cur.fetchall()
worksheet1.write('A1', 'Sale ID')

col = 0

for row, elm1 in enumerate(sales, start=1):
    worksheet1.write(row, col, elm1[0])

如果要返回多个项目,即第二列,您可以按如下方式添加它们:

for row, elm1 in enumerate(sales, start=1):
    worksheet1.write(row, col, elm1[0])
    worksheet1.write(row, col+1, elm1[1])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2019-08-06
    相关资源
    最近更新 更多