• QT не работает с with?

    tamaz1987
    @tamaz1987 Автор вопроса
    Умный, красивый
    В общем решил вопрос. Как мне кажется жутким костылем.
    Я в функции которая получает адрес файла вызвал функцию которая обрабатывает этот же файл и передал ему переменную с адресом файла.
    Заработало.
    Выглядит вот так.

    Подскажите это прям жуткий костыль? Или приемлемое решение?

    Функция которая обрабатывает файл:
    def import_csv_orders(orders_file):  # импорт csv в базу данных
        con = sqlite3.connect('razbor.db')
        cur = con.cursor()
        print(f'ордер файл {orders_file}')
        orders = orders_file
        with open(orders, newline='') as csvfile:  # чтение файла
            rows = csv.reader(csvfile, delimiter=';')  # чтение файла
            counter = 0
            for row in rows:  # разбор файла
                print(row)
                # присваеваем запрос переменной
                sqlite_insert_query = """INSERT INTO orders
                                        (supply, customer_name, customer, code_ps_d, material, scope_of_delivery, unit, quantity_in_pieces, picking_date, batch, fresh, vsd, Transporting_the_second_arm)
                                    VALUES
                                        (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"""
    
                cur.executemany(sqlite_insert_query, rows)     # запрос совместно с кортежем данных из csv файла
                counter += 1
                con.commit()
        color_txt_print('База Orders загружена успешно', 'система')


    Функция которая получает путь и в ней же вызвана функция обработки файла:
    def open_file_orders(): # выбор файла Ордерс
        app = QtWidgets.QApplication([])
        path_file = QtWidgets.QFileDialog.getOpenFileName(None, directory=r'C:\Users\tomhu\Desktop', filter="Data Base (*.csv)")[0]
        print(path_file)
        form.ordersLine.setText(path_file)
        print(f"Выбран ордерс путь {path_file}")
        print(type(path_file))
        import_csv_orders(path_file)  # вызываем функцию обработки файла и передаем в параметры путь до файла
        print('База ордерс загружена')
    Ответ написан
    Комментировать
  • Openpyxl. Как кортеж записать в диапазон ячеек?

    tamaz1987
    @tamaz1987 Автор вопроса
    Умный, красивый
    Решил вот таким способом. Скажите это очень плохое решение?
    import pandas as pd
    import sqlite3
    from openpyxl import Workbook
    
    from openpyxl.reader.excel import load_workbook
    
    wb = load_workbook(filename='Сборочный.xlsx')
    ws = wb.active
    
    col = ("A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1", "I1", "J1")
    heading = ('Номер поставки', 'Код товара', 'Позиция', 'Номер партии', 'Срок годности', 'Коробов', 'ЕИ', 'Маршрут', 'номер а/м', 'Ячейка отбора')
    for sheet in wb.sheetnames:
        i = 0
        ws = wb[sheet]
        while i < len(col):
            ws[col[i]].value = heading[i]
            i += 1
    wb.save('Сборочный.xlsx')
    Ответ написан
  • SQLite3. Как добавить значение, где user_id равен message.chat.id?

    tamaz1987
    @tamaz1987
    Умный, красивый
    UPDATE `users` SET `my_ref_sub` = ? WHERE `user_id` = ?", (sub, user_id)


    Данный код явно просит БД обновить строку с о значениемuser_id. База данных находит эту строку и обновляет поле. Если вы хотите сделать именно новую запись необходимо использовать INSERT. В этом случае база запишет данные в новую строку, а не обновит имеющуюся.
    Ответ написан
    Комментировать