Ошибка xlsxwriter - Попытка записать вывод SQL в таблицу Excel - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь записать вывод SQL-запроса в Excel с помощью модуля XLSXwriter.

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

Может ли кто-нибудь помочь, где я иду не так.Спасибо ..

1 Ответ

0 голосов
/ 19 сентября 2018

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])
...