def load_file(): ask = wc.CalendarDialog(window) if ask.result is None: return elif ask.result.day != 1: log.err_print( 'Некорректная дата реестра! Допускается только первое число месяца!' ) mb.showerror( 'Загрузка реестра', 'Некорректная дата реестра! Допускается только первое число месяца!' ) return else: # проверим уникальность conn = sql.DatabaseManager('Zirk.db') if not conn.isPrimary('Reestr', {'Reestr_date': ask.result}): if not mb.askokcancel( 'Повторная загрузка', 'Реестр за эту дату уже заагружался.\nПерезатереть ранее загруженные данные?' ): return log.ok_print('Запускаем загрузку за дату: {}'.format( str(ask.result))) # return file = xlsparser.Reestr(ask.result) if file.path == '': return ds = file.parse() if ds: # conn = sql.DatabaseManager('Zirk.db') conn.delete('where reestr_date = date(\'{}\')'.format(str(ask.result))) for rec in ds: conn.insert('Reestr', rec.values()) conn.commit()
def drop_table(self, name): sSQL = 'drop table {}'.format(name) try: self.cursor.execute(sSQL) log.ok_print('table {} dropped successfully'.format(name)) except Exception as e: log.err_print("Can't drop table {}".format(name) + ': ' + str(e))
def parse(self): file = xlrd.open_workbook(self.path) sheet = file.sheet_by_index(0) vals = [sheet.row_values(rownum) for rownum in range(sheet.nrows)] ds = [] cnt = 0 allcnt = 0 # Ищем позицию строки Итого # for row in vals: if str(row[0]) == 'номер': try: posTotal = row.index('итого:') break except ValueError as e: errtext = 'Некорректный формат файла. Не найден столбец "итого:"' log.err_print(errtext) mb.showerror('Загрузка реестра', errtext) return else: errtext = 'Некорректный формат файла. Не найдена шапка таблицы!"' log.err_print(errtext) mb.showerror('Загрузка реестра', errtext) return for row in vals: allcnt += 1 try: if str(row[0]).startswith('комплекс') or str(row[0]).startswith('номер') or row[0] == '': continue total = 0.0 for sums in range(3, posTotal): total += float(row[sums] or 0) res = { 'reestr_id': self.id, 'reestr_date': self.dt, 'pactnum': str(row[0]), 'place': str(row[1]), 'renter': str(row[2]), 'month': 'JAN', 'summ': row[sums], 'phone': row[6] } ds.append(res) cnt += 1 if total != row[5]: errtext = 'Ошибка в строке {}: поле "Итого" {} не соответствует сумме платежей {}'.format(row[2], row[5], str(total)) log.err_print(errtext) mb.showerror('Загрузка реестра', errtext) return except Exception as e: errtext = 'Ошибка при разборе файла на строке {}'.format(str(allcnt))+': '+str(e) log.err_print(errtext) mb.showerror('Загрузка реестра', errtext) return oktext = ('Файл успешно разобран. Обработано строк: {}'.format(str(cnt))) log.ok_print(oktext) mb.showinfo('Загрузка реестра', oktext) return ds
def delete(self, clause): sSQL = 'delete from Reestr ' + clause try: log.ok_print(sSQL) self.cursor.execute(sSQL) log.ok_print(str(self.cursor.rowcount) + ' rows deleted') except Exception as e: log.err_print('Ошибка при удалении: ' + str(e))
def getquery(self, sSQL: str): """ :rtype: Cursor """ log.ok_print('SQL: ' + sSQL) try: ls = list(self.cursor.execute(sSQL)) log.ok_print(' rows selected: ' + str(len(ls))) return ls except Exception as e: log.err_print('SQL ERROR: ' + '\n' + sSQL + '\n' + str(e))
def create_table(self, name, columns: dict): sSQL = 'create table {} ('.format(name) for k, v in columns.items(): sSQL = sSQL + k + ' ' + v if k == list(columns.keys())[-1]: sSQL = sSQL + ')' else: sSQL = sSQL + ',' try: self.cursor.execute(sSQL) log.ok_print('table {} successfully created'.format(name)) except Exception as e: log.err_print('Error while creating table {}'.format(name) + ' ' + str(e))
def insert(self, table, column: list): sSQL = 'insert into {} values ('.format(table) for i, v in enumerate(column): if type(v) is int or type(v) is float: vv = str(v) else: vv = "'" + str(v) + "'" sSQL = sSQL + vv if i == len(column) - 1: sSQL = sSQL + ')' else: sSQL = sSQL + ',' log.ok_print(sSQL) try: self.cursor.execute(sSQL) log.ok_print('1 row inserted into {}'.format(table)) except Exception as e: log.err_print('Ошибка при Insert в таблицу {}: '.format(table) + str(e))
def commit(self): self.conn.commit() log.ok_print('Commit')