Пример #1
0
 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()
Пример #2
0
 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()
Пример #3
0
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)  # заполнение таблицы заново
Пример #4
0
 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()
Пример #5
0
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])))
Пример #6
0
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])) +
                    " руб."))
Пример #7
0
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)
Пример #8
0
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)
Пример #9
0
 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()
Пример #10
0
 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()
Пример #11
0
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)
Пример #12
0
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)
Пример #13
0
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)
Пример #14
0
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)
Пример #15
0
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])))
Пример #16
0
def query():

    payload = json.loads(request.data)
    return make_query(payload)
Пример #17
0
def get_number_of_rows():
    res = make_query(link, "SELECT COUNT(*) FROM game")
    return res[0][0]  # возвращает количество записей в базе
Пример #18
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))
Пример #19
0
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)
Пример #20
0
def get_number_of_columns(link, tab):
    res = make_query(link, "pragma table_info({})".format(tab))
    return len(res)
Пример #21
0
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_()
Пример #22
0
def get_number_of_rows(link, tab, filter_str=""):
    res = make_query(link, "SELECT COUNT(*) FROM {}".format(tab) + filter_str)
    return res[0][0]  # возвращает количество записей в базе
Пример #23
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_()