def edit_in_db(): err_msg_list = [] # список для хранения текстов об ошибках # проверка исправленных пользователем полей if inp1.text() == "": err_msg_list.append("Необходимо ввести название!<br>") cat_names = make_query( link, "SELECT name FROM category WHERE NOT id='{}'".format(edit_id)) if inp1.text() in [each[0] for each in cat_names]: err_msg_list.append( "Категория с таким названием уже есть!<br>") if inp2.toPlainText() == "": err_msg_list.append("Необходимо ввести описание!<br>") # Если были ошибки при вводе => оповещение пользователя об этом if len(err_msg_list) != 0: err_msg = qt.QErrorMessage() err_msg.setWindowTitle("Ошибка!") err_msg.setModal(True) err_msg.showMessage("".join(err_msg_list)) err_msg.exec_() else: make_query( link, "UPDATE category SET name='{}', description='{}' WHERE id='{}'" .format(inp1.text(), inp2.toPlainText(), edit_id)) selected_row = cat_table.currentRow( ) # сохраниение номера ряда, который был выделен fill_cat_table(cat_table, link) cat_table.selectRow( selected_row ) # сохраняет выделение разработчика после редактирования fill_table( table, link, dev_table, cat_table ) # table - чтобы изменились названия категорий в табице товаров edit_win.close()
def add_to_db(): err_msg_list = [] # список для хранения текстов об ошибках # проверка введенных пользователем полей if inp1.text() == "": err_msg_list.append("Необходимо ввести название!<br>") if inp2.toPlainText() == "": err_msg_list.append("Необходимо ввести описание!<br>") if inp3.text() == "": err_msg_list.append("Необходимо выбрать категорию!<br>") if inp4.text() == "": err_msg_list.append("Необходимо указать цену!<br>") elif not is_float(inp4.text()): err_msg_list.append("Цена должна быть числовой!<br>") # Если были ошибки при вводе -> оповещение пользователя об этом if len(err_msg_list) != 0: err_msg = qt.QErrorMessage() err_msg.setWindowTitle("Ошибка!") err_msg.setModal(True) err_msg.showMessage("".join(err_msg_list)) err_msg.exec_() else: make_query( link, "INSERT INTO game (game_name, description, category, price) values('{}', '{}', '{}', '{}')" .format(inp1.text(), inp2.toPlainText(), inp3.text(), inp4.text())) fill_table() add_win.close()
def delete_dev(dev_table, link, widget, table, cat_table): try: del_id = dev_table.selectedItems()[0].text( ) # сохранение id разработчика выбранной строки except IndexError: err_msg = qt.QErrorMessage() err_msg.setWindowTitle("Ошибка!") err_msg.setModal(True) err_msg.showMessage("Необходимо выбрать строку для удаления!") err_msg.exec_() else: del_win = qt.QMessageBox(widget) # создается окно подтверждения del_win.setModal(True) del_win.setStandardButtons( qt.QMessageBox.Yes | qt.QMessageBox.Cancel) # 2 стандартные кнопки del_win.setText( "Вы действительно хотите удалить выбранную запись?\nСвязанные элементы также будут удалены.\n\n" "Yes - подтвердить\nCancel - отменить") del_win.setWindowTitle("Удаление") choice = del_win.exec_() # сохранение выбора пользователя if choice == qt.QMessageBox.Yes: # при подтверждении удаление записи make_query(link, "DELETE FROM developer WHERE id='{}'".format( del_id)) # удаление разработчика make_query(link, "DELETE FROM game WHERE developer='{}'".format( del_id)) # удаление товара разработчика fill_dev_table(dev_table, link) fill_table(table, link, dev_table, cat_table) # заполнение таблицы заново
def edit_in_db(): err_msg_list = [] # список для хранения текстов об ошибках # проверка исправленных пользователем полей if inp1.text() == "": err_msg_list.append("Необходимо ввести название!<br>") if inp2.toPlainText() == "": err_msg_list.append("Необходимо ввести описание!<br>") if inp3.text() == "": err_msg_list.append("Необходимо выбрать категорию!<br>") if inp4.text() == "": err_msg_list.append("Необходимо указать цену!<br>") elif not is_float(inp4.text()): err_msg_list.append("Цена должна быть числовой!<br>") # Если были ошибки при вводе => оповещение пользователя об этом if len(err_msg_list) != 0: err_msg = qt.QErrorMessage() err_msg.setWindowTitle("Ошибка!") err_msg.setModal(True) err_msg.showMessage("".join(err_msg_list)) err_msg.exec_() else: make_query( link, "UPDATE game SET game_name='{}', description='{}', category='{}', price='{}' WHERE id='{}'" .format(inp1.text(), inp2.toPlainText(), inp3.text(), inp4.text(), edit_id)) fill_table() edit_win.close()
def fill_table(table, link, dev_table, cat_table, sorting=""): table.clear() # очистка таблицы # для фильрации товара при выбранном разработчике или категории filter_str = "" if len(dev_table.selectedItems()) != 0 and len( cat_table.selectedItems()) != 0: filter_str += " WHERE developer='{}' AND category='{}'".format( dev_table.selectedItems()[0].text(), cat_table.selectedItems()[0].text()) elif len(cat_table.selectedItems()) != 0: filter_str += " WHERE category='{}'".format( cat_table.selectedItems()[0].text()) elif len(dev_table.selectedItems()) != 0: filter_str += " WHERE developer='{}'".format( dev_table.selectedItems()[0].text()) col_num = get_number_of_columns(link, "game") row_num = get_number_of_rows(link, "game", filter_str) table.setColumnCount(col_num) # количество столбцов column_widths = [35, 73, 275, 90, 80, 47] # значания для ширины столбцов for i in range(len(column_widths)): table.setColumnWidth(i, column_widths[i]) # установка ширины столбцов table.setRowCount(row_num) # количество строк for i in range(row_num): table.setRowHeight(i, 110) # установка высоты строк table.setHorizontalHeaderLabels( ["ID", "Название", "Описание", "Разработчик", "Категория", "Цена"]) # заголовки столбцов for i in range(row_num): for j in range(col_num): res = make_query(link, "SELECT * FROM game" + filter_str + sorting) if j == 3: # подмена id разраба на название при выводе в таблицу dev_name = make_query( link, "SELECT name FROM developer WHERE id='{}'".format( res[i][j])) table.setItem(i, j, qt.QTableWidgetItem(dev_name[0][0])) elif j == 4: # подмена id категории на название при выводе в таблицу dev_name = make_query( link, "SELECT name FROM category WHERE id='{}'".format( res[i][j])) table.setItem(i, j, qt.QTableWidgetItem(dev_name[0][0])) elif j == 5: # вывод цены с припиской "руб." table.setItem( i, j, qt.QTableWidgetItem(str(float(res[i][j])) + " руб.")) else: table.setItem(i, j, qt.QTableWidgetItem(str(res[i][j])))
def fill_table(): table.clear() # очистка таблицы col_num = get_number_of_columns() row_num = get_number_of_rows() table.setColumnCount(col_num) # количество столбцов column_widths = [35, 130, 400, 140, 80] # значания для ширины столбцов for i in range(len(column_widths)): table.setColumnWidth(i, column_widths[i]) # установка ширины столбцов table.setRowCount(row_num) # количество строк for i in range(row_num): table.setRowHeight(i, 100) # установка высоты строк table.setHorizontalHeaderLabels( ["ID", "Название", "Описание", "Категория", "Цена"]) # заголовки столбцов # table.horizontalHeaderItem(0).setToolTip("column 1") # table.horizontalHeaderItem(1).setToolTip("column 2") # table.horizontalHeaderItem(2).setToolTip("column 3") for i in range(row_num): for j in range(col_num): res = make_query(link, "SELECT * FROM game") table.setItem( i, j, qt.QTableWidgetItem( str(res[i][j]) if j != 4 else str(float(res[i][j])) + " руб."))
def get_search_results(**kw): """ search the catalog and return the results The request may contain additional query parameters """ query = make_query(**kw) return search(query)
def edit_in_db(): err_msg_list = [] # список для хранения текстов об ошибках # проверка исправленных пользователем полей if inp1.text() == "": err_msg_list.append("Необходимо ввести название!<br>") game_names = make_query( link, "SELECT name FROM game WHERE NOT id='{}'".format(edit_id)) if inp1.text() in [each[0] for each in game_names]: err_msg_list.append("Игра с таким названием уже есть!<br>") if inp2.toPlainText() == "": err_msg_list.append("Необходимо ввести описание!<br>") if inp3.currentText() == "": err_msg_list.append("Необходимо выбрать разработчика!<br>") if inp4.currentText() == "": err_msg_list.append("Необходимо выбрать категорию!<br>") if inp5.text() == "": err_msg_list.append("Необходимо указать цену!<br>") elif not is_float(inp5.text()): err_msg_list.append("Цена должна быть числовой!<br>") # Если были ошибки при вводе => оповещение пользователя об этом if len(err_msg_list) != 0: err_msg = qt.QErrorMessage() err_msg.setWindowTitle("Ошибка!") err_msg.setModal(True) err_msg.showMessage("".join(err_msg_list)) err_msg.exec_() else: id_dev = make_query( link, "SELECT id FROM developer WHERE name='{}'".format( inp3.currentText())) id_cat = make_query( link, "SELECT id FROM category WHERE name='{}'".format( inp4.currentText())) make_query( link, "UPDATE game SET name='{}', description='{}', developer='{}', category='{}', price='{}' WHERE id='{}'" .format(inp1.text(), inp2.toPlainText(), id_dev[0][0], id_cat[0][0], inp5.text(), edit_id)) fill_table(table, link, dev_table, cat_table) edit_win.close()
def add_to_db(): err_msg_list = [] # список для хранения текстов об ошибках # проверка введенных пользователем полей if inp1.text() == "": err_msg_list.append("Необходимо ввести название!<br>") dev_names = make_query(link, "SELECT name FROM developer") if inp1.text() in [each[0] for each in dev_names]: err_msg_list.append("Разработчик с таким названием уже есть!<br>") if inp2.toPlainText() == "": err_msg_list.append("Необходимо ввести описание!<br>") # Если были ошибки при вводе -> оповещение пользователя об этом if len(err_msg_list) != 0: err_msg = qt.QErrorMessage() err_msg.setWindowTitle("Ошибка!") err_msg.setModal(True) err_msg.showMessage("".join(err_msg_list)) err_msg.exec_() else: make_query( link, "INSERT INTO developer (name, description) values('{}', '{}')". format(inp1.text(), inp2.toPlainText())) fill_dev_table(dev_table, link) add_win.close()
def print_report_cat(link): html = "<h6 align=\"right\">{}</h6>".format(datetime.datetime.now()) html += "<h1 align=\"center\">Отчёт по категориям:</h1><br><br>" categories = make_query(link, "SELECT name FROM category") categories = [each[0] for each in categories] # список категорий for category in categories: html += "<strong>{}</strong>".format(category) cat_id = make_query( link, "SELECT id FROM category WHERE name='{}'".format(category)) games = make_query( link, "SELECT name FROM game WHERE category='{}'".format(cat_id[0][0])) for game in games: html += "<pre> {}</pre>".format(game[0]) printer = Qt.QPrinter() txt = Qt.QTextEdit() txt.setHtml(html) print_dialog = Qt.QPrintDialog(printer) if print_dialog.exec() == Qt.QDialog.Accepted: txt.print(printer)
def print_report_dev(link): html = "<h6 align=\"right\">{}</h6>".format(datetime.datetime.now()) html += "<h1 align=\"center\">Отчёт по разработчикам:</h1><br><br>" developers = make_query(link, "SELECT name FROM developer") developers = [each[0] for each in developers] # список разработчиков for developer in developers: html += "<strong>{}</strong>".format(developer) dev_id = make_query( link, "SELECT id FROM developer WHERE name='{}'".format(developer)) games = make_query( link, "SELECT name FROM game WHERE developer='{}'".format(dev_id[0][0])) for game in games: html += "<pre> {}</pre>".format(game[0]) printer = Qt.QPrinter() txt = Qt.QTextEdit() txt.setHtml(html) print_dialog = Qt.QPrintDialog(printer) if print_dialog.exec() == Qt.QDialog.Accepted: txt.print(printer)
def get_search_results(**kw): """Search the catalog and return the results :returns: Catalog search results :rtype: list/Products.ZCatalog.Lazy.LazyMap """ # allow to search for the Plone site if kw.get("portal_type") == "Plone Site": return [get_portal()] elif kw.get("id") in PORTAL_IDS: return [get_portal()] elif kw.get("uid") in PORTAL_IDS: return [get_portal()] # build and execute a catalog query query = make_query(**kw) return search(query)
def fill_dev_table(dev_table, link, sorting=""): dev_table.clear() # очистка таблицы col_num = get_number_of_columns(link, "developer") row_num = get_number_of_rows(link, "developer") dev_table.setColumnCount(col_num) # количество столбцов column_widths = [35, 120, 446] # значания для ширины столбцов for i in range(len(column_widths)): dev_table.setColumnWidth(i, column_widths[i]) # установка ширины столбцов dev_table.setRowCount(row_num) # количество строк for i in range(row_num): dev_table.setRowHeight(i, 110) # установка высоты строк dev_table.setHorizontalHeaderLabels(["ID", "Название", "Описание"]) # заголовки столбцов for i in range(row_num): for j in range(col_num): res = make_query(link, "SELECT * FROM developer" + sorting) dev_table.setItem(i, j, qt.QTableWidgetItem(str(res[i][j])))
def query(): payload = json.loads(request.data) return make_query(payload)
def get_number_of_rows(): res = make_query(link, "SELECT COUNT(*) FROM game") return res[0][0] # возвращает количество записей в базе
def main(): parser = ArgumentParser( formatter_class=RawDescriptionHelpFormatter, description=f"{module_name} (Version {__version__})") parser.add_argument( "--list", "-l", metavar='FILE_WITH_SEARCH_PARAMS', action="store", dest="search_params_file", default=None, help= "Csv file storing credentials to be searched. Must have collumns mail,ip,name,all" ) parser.add_argument( "--mode", "-m", metavar='QUERY_MODE', action="store", dest="query_mode", default="multi", help=f"Search options, can be {str(ACCEPTABLE_SEARCH_PARAMS)}.") parser.add_argument( "--out-form", "-of", metavar='OUTPUT_FORMAT', action="store", dest="output_format", default=None, help=f"Select output format. Defaults to pipe delimited format.") args = parser.parse_args() query_mode = args.query_mode qparams_filename = args.search_params_file output_mode = args.output_format if query_mode not in ACCEPTABLE_SEARCH_PARAMS: raise ValueError( f"{query_mode} is not an acceptable query mode. Please choose from {str(ACCEPTABLE_SEARCH_PARAMS)}" ) if output_mode not in ACCEPTABLE_OUTPUT_FORMATS: raise ValueError( f"{output_mode} is not an acceptable format. Please choose from {str(ACCEPTABLE_OUTPUT_FORMATS)}" ) query_list = [ validate_qparams(i) for i in params_from_csv(qparams_filename) ] xml_format = True if output_mode == 'xml' else False for q in query_list: sleep(1) if query_mode == 'multi': print(make_query(q, multiple=True, xml_format=xml_format)) else: print( make_query({query_mode: q[query_mode]}, xml_format=xml_format))
import requests import json from pprint import pprint from constants import CONSTANTS from query import make_query q = make_query("https://google.com", "url,title") resp = requests.post(f"http://localhost:3000/graphql", params={'query': q}) pprint(resp.content) obj = json.loads(resp.text) pprint(obj)
def get_number_of_columns(link, tab): res = make_query(link, "pragma table_info({})".format(tab)) return len(res)
def add_row(table, link, widget, dev_table, cat_table): add_win = qt.QDialog(widget) add_win.setModal(True) add_win.resize(400, 100) add_win.setWindowTitle("Добавление") lbl1 = qt.QLabel("Название:") inp1 = qt.QLineEdit() lbl2 = qt.QLabel("Описание:") inp2 = qt.QTextEdit() lbl3 = qt.QLabel("Разработчик:") inp3 = qt.QComboBox() # выпадающий список для разработчика developers = make_query(link, "SELECT name FROM developer") inp3.addItem( "" ) # пустое значение, чтобы пользователю обязательно надо было выбрать разработчика inp3.addItems([each[0] for each in developers ]) # достать из "разработчиков" их названия lbl4 = qt.QLabel("Категория:") inp4 = qt.QComboBox() # выпадающий список для категории categories = make_query(link, "SELECT name FROM category") inp4.addItem( "" ) # пустое значение, чтобы пользователю обязательно надо было выбрать категорию inp4.addItems(each[0] for each in categories) # достать из "категорий" их названия lbl5 = qt.QLabel("Цена:") inp5 = qt.QLineEdit() btn = qt.QPushButton("Добавить") grid2 = qt.QVBoxLayout(add_win) grid2.addWidget(lbl1, 0) grid2.addWidget(inp1, 1) grid2.addWidget(lbl2, 2) grid2.addWidget(inp2, 3) grid2.addWidget(lbl3, 4) grid2.addWidget(inp3, 5) grid2.addWidget(lbl4, 6) grid2.addWidget(inp4, 7) grid2.addWidget(lbl5, 8) grid2.addWidget(inp5, 9) grid2.addWidget(btn, 10) def add_to_db(): err_msg_list = [] # список для хранения текстов об ошибках # проверка введенных пользователем полей if inp1.text() == "": err_msg_list.append("Необходимо ввести название!<br>") game_names = make_query(link, "SELECT name FROM game") if inp1.text() in [each[0] for each in game_names]: err_msg_list.append("Игра с таким названием уже есть!<br>") if inp2.toPlainText() == "": err_msg_list.append("Необходимо ввести описание!<br>") if inp3.currentText() == "": err_msg_list.append("Необходимо выбрать разработчика!<br>") if inp4.currentText() == "": err_msg_list.append("Необходимо выбрать категорию!<br>") if inp5.text() == "": err_msg_list.append("Необходимо указать цену!<br>") elif not is_float(inp5.text()): err_msg_list.append("Цена должна быть числовой!<br>") # Если были ошибки при вводе -> оповещение пользователя об этом if len(err_msg_list) != 0: err_msg = qt.QErrorMessage() err_msg.setWindowTitle("Ошибка!") err_msg.setModal(True) err_msg.showMessage("".join(err_msg_list)) err_msg.exec_() else: id_dev = make_query( link, "SELECT id FROM developer WHERE name='{}'".format( inp3.currentText())) id_cat = make_query( link, "SELECT id FROM category WHERE name='{}'".format( inp4.currentText())) make_query( link, "INSERT INTO game (name, description, developer, category, price) values('{}', '{}', '{}', '{}', '{}')" .format(inp1.text(), inp2.toPlainText(), id_dev[0][0], id_cat[0][0], inp5.text())) fill_table(table, link, dev_table, cat_table) add_win.close() btn.clicked.connect(add_to_db) # привязка функции к кнопке "добавить" add_win.exec_()
def get_number_of_rows(link, tab, filter_str=""): res = make_query(link, "SELECT COUNT(*) FROM {}".format(tab) + filter_str) return res[0][0] # возвращает количество записей в базе
def edit(table, link, widget, dev_table, cat_table): try: edit_id = table.selectedItems()[0].text( ) # сохранение id товара выбранной строки except IndexError: err_msg = qt.QErrorMessage() err_msg.setWindowTitle("Ошибка!") err_msg.setModal(True) err_msg.showMessage("Необходимо выбрать строку для редактирования!") err_msg.exec_() else: edit_win = qt.QDialog(widget) edit_win.setModal(True) edit_win.resize(400, 100) edit_win.setWindowTitle("Редактирование") lbl1 = qt.QLabel("Название:") inp1 = qt.QLineEdit() inp1.setText(table.selectedItems()[1].text()) lbl2 = qt.QLabel("Описание:") inp2 = qt.QTextEdit() inp2.setText(table.selectedItems()[2].text()) lbl3 = qt.QLabel("Разработчик:") inp3 = qt.QComboBox() developers = make_query(link, "SELECT name FROM developer") developers = [each[0] for each in developers] # список разработчиков inp3.addItems(developers) # достать из "разработчиков" их названия inp3.setCurrentIndex(developers.index(table.selectedItems()[3].text())) lbl4 = qt.QLabel("Категория:") inp4 = qt.QComboBox() categories = make_query(link, "SELECT name FROM category") categories = [each[0] for each in categories] # список категорий inp4.addItems(categories) # достать из "категорий" их названия inp4.setCurrentIndex(categories.index(table.selectedItems()[4].text())) lbl5 = qt.QLabel("Цена:") inp5 = qt.QLineEdit() inp5.setText(table.selectedItems()[5].text() [:-5]) # обрезка " руб." в конце цены btn = qt.QPushButton("Сохранить") grid2 = qt.QVBoxLayout(edit_win) grid2.addWidget(lbl1, 0) grid2.addWidget(inp1, 1) grid2.addWidget(lbl2, 2) grid2.addWidget(inp2, 3) grid2.addWidget(lbl3, 4) grid2.addWidget(inp3, 5) grid2.addWidget(lbl4, 6) grid2.addWidget(inp4, 7) grid2.addWidget(lbl5, 8) grid2.addWidget(inp5, 9) grid2.addWidget(btn, 10) def edit_in_db(): err_msg_list = [] # список для хранения текстов об ошибках # проверка исправленных пользователем полей if inp1.text() == "": err_msg_list.append("Необходимо ввести название!<br>") game_names = make_query( link, "SELECT name FROM game WHERE NOT id='{}'".format(edit_id)) if inp1.text() in [each[0] for each in game_names]: err_msg_list.append("Игра с таким названием уже есть!<br>") if inp2.toPlainText() == "": err_msg_list.append("Необходимо ввести описание!<br>") if inp3.currentText() == "": err_msg_list.append("Необходимо выбрать разработчика!<br>") if inp4.currentText() == "": err_msg_list.append("Необходимо выбрать категорию!<br>") if inp5.text() == "": err_msg_list.append("Необходимо указать цену!<br>") elif not is_float(inp5.text()): err_msg_list.append("Цена должна быть числовой!<br>") # Если были ошибки при вводе => оповещение пользователя об этом if len(err_msg_list) != 0: err_msg = qt.QErrorMessage() err_msg.setWindowTitle("Ошибка!") err_msg.setModal(True) err_msg.showMessage("".join(err_msg_list)) err_msg.exec_() else: id_dev = make_query( link, "SELECT id FROM developer WHERE name='{}'".format( inp3.currentText())) id_cat = make_query( link, "SELECT id FROM category WHERE name='{}'".format( inp4.currentText())) make_query( link, "UPDATE game SET name='{}', description='{}', developer='{}', category='{}', price='{}' WHERE id='{}'" .format(inp1.text(), inp2.toPlainText(), id_dev[0][0], id_cat[0][0], inp5.text(), edit_id)) fill_table(table, link, dev_table, cat_table) edit_win.close() btn.clicked.connect( edit_in_db) # привязка функции к кнопке "сохранить" edit_win.exec_()