#python #python-3.x #sqlite #csv #export-to-csv
Вопрос:
Я написал следующий код в попытке экспортировать результат запроса в файл csv.
def get_avg(self,f0, f00, f1, f2):
arr = [1,2,3,4,5,6,7,8,9,10,11,12,13]
for n in arr:
curr_tab = c.execute("SELECT {}, {}, COUNT({}), AVG({}), AVG({}) FROM {} WHERE {} = {} GROUP BY {} ORDER BY COUNT({}) DESC".format(f0, f00, f00, f1, f2, self.table_name, f0, n, f00, f00)).fetchall()
print(curr_tab)
with open("cvc.csv", "w") as this_file:
for i in curr_tab:
csv.writer(this_file).writerow(i)
Проблема в том, что когда я нажимаю кнопку, вызывающую эту конкретную функцию, создается файл cvc.csv, но в файл ничего не записывается.
в то время как результат печати(curr_tab) сам по себе возвращает желаемые результаты.
[(1.0, 'late', 1, 359.0, 11.0)]
[(2.0, 'early', 1, 460.0, 13.0)]
[]
[]
[]
[]
[]
[]
[(9.0, 'early', 1, 460.0, 19.0)]
[]
[]
[]
[]
Комментарии:
1. Вы пишете только результат последнего запроса.
Ответ №1:
Каждый раз в for n in arr:
цикле вы curr_tab
заменяете результаты этого запроса. Поэтому, когда вы пишете в CSV-файл, вы просто записываете результаты последнего запроса.
Вы можете либо переместить запись CSV внутри этого цикла, либо объединить все результаты запроса и записать их.
def get_avg(self,f0, f00, f1, f2):
arr = [1,2,3,4,5,6,7,8,9,10,11,12,13]
all_tab = []
for n in arr:
curr_tab = c.execute("SELECT {}, {}, COUNT({}), AVG({}), AVG({}) FROM {} WHERE {} = {} GROUP BY {} ORDER BY COUNT({}) DESC".format(f0, f00, f00, f1, f2, self.table_name, f0, n, f00, f00)).fetchall()
print(curr_tab)
all_tab.extend(curr_tab)
with open("cvc.csv", "w") as this_file:
csv.writer(this_file).writerows(all_tab)