Не удается экспортировать результаты запроса в файл csv

#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)