@vlad758

Как правильно работать с подключением к SQLITE3 в цикле?

Пытаюсь перекинуть данные из таблицы xlsx в SQLITE... Перед вторым проходом выполняет print(data_cell) и перед with почему-то вылетает.. В БД успешно добавлено только первое значение. Проблема в зацикливании подключения к SQLITE? Если да, то как это можно поправить?

book = openpyxl.open(f"{path_load_file}")
            print(book)
            sheet = book.active
            print(sheet)

            sheet_data_row = []
            max_col = sheet.max_column
            max_row = sheet.max_row
            for row in range(1, sheet.max_row + 1):
                sheet_data_col = []
                for col in range(0, sheet.max_column):
                    data_field = sheet[row][col].value
                    sheet_data_col.append(data_field)
                print(sheet_data_col)
                sheet_data_row.append(sheet_data_col)
            print(sheet_data_row)

            data_from_file = list()
            data_from_file.append('rm_col_1')

            for i in range(1, max_col):
                print(f"i: {i}")
                new_name_col = f"rm_col_{i+1}"
                data_from_file.append(f'{new_name_col}')
                print(f"data_from_file: {data_from_file}")
                self.add_column_from_file(new_name_col, direction_db)

            for k in range(1, max_row):
                f = 0
                for c in range(0, max_col):

                    with sq.connect(f"direction_db/{lg_hash_dir}/{direction_db}.db") as con:
                        print("7")
                        cur = con.cursor()
                        print("8")
                        insert_data_to_col_from_file = "INSERT INTO direction_db (%s) VALUES (?)" % f"rm_col_{c+1}"
                        print("9")
                        data_cell = (sheet_data_row[f][c],)
                        print(f"data_cell: {data_cell}")
                        cur.execute(insert_data_to_col_from_file, data_cell)
                        f = f + 1
                        con.commit()
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
@12rbah
Не уверен, что из-за это но соединение с бд либо нужно закрывать в конце цикла, но это плохой вариант, либо открыть соединие перед выполнением `for k in range(1, max_row):` и закрыть его после выполнения всего цикла. Возможно еще есть проблемы с данными, поэтому нужно показать текст ошибки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы