class DialogSqlQuery(QDialog): """ Dialog for Sql query """ # Slots @pyqtSlot() def __populate_select_template(self): self.__sql_input.setPlainText(self.__db_access.compose_select(self.__db_name, self.__table_name, self.__columns, self.__columns[0])) @pyqtSlot() def __populate_update_template(self): self.__sql_input.setPlainText(self.__db_access.compose_update(self.__db_name, self.__table_name, self.__columns)) @pyqtSlot() def __execute_query(self): sql = self.__sql_input.toPlainText() if sql == '': return #self.__action_dict[[p for p in sql.split(' ') if p != ''][0]]() #self.__output.model().setColumnCount(len(self.__columns)) #for (i, v) in zip(range(len(self.__columns)), self.__columns): # self.__output.model().setHeaderData(i, Qt.Horizontal, v) lst = self.__db_access.query(sql) #for values in lst: # items = [] # for v in values: # items.append(QStandardItem(str(v))) # self.__output.model().appendRow(items) @pyqtSlot() def __clear_query_input(self): self.__sql_input.clear() @pyqtSlot() def __populate_delete_template(self): self.__sql_input.setPlainText(self.__db_access.compose_delete(self.__db_name, self.__table_name)) @pyqtSlot() def __populate_insert_template(self): self.__sql_input.setPlainText(self.__db_access.compose_insert(self.__db_name, self.__table_name, self.__columns)) @staticmethod def none_to_space(s=None) -> str: if s is None: return ' ' return s def __init__(self, db_access, table_name, db_name, columns): super().__init__() self.__init_consts() self.__init_ui() self.__db_access = db_access self.__table_name = self.none_to_space(table_name) self.__db_name = self.none_to_space(db_name) self.__columns = self.none_to_space(columns) self.__setup_output_creation() def __setup_output_creation(self) -> {dict}: return { self.__SELECT: self.__create_treeview_output, self.__UPDATE: self.__create_plaintext_output, self.__DELETE: self.__create_plaintext_output, self.__INSERT: self.__create_plaintext_output } def __create_treeview_output(self): self.__output = QTableView() self.__output.setModel(QStandardItemModel()) def __create_plaintext_output(self): self.__output = QPlainTextEdit() def __init_consts(self): self.__LBL_SQL_QUERY= QLabel('SQL: ') self.__LBL_SQL_TEMPLATES = QLabel('Templates: ') self.__TITLE = 'SQL Query' self.__GO = 'Go' self.__CLEAR = 'Clear' self.__CANCEL = 'Cancel' self.__SELECT = 'SELECT' self.__UPDATE = 'UPDATE' self.__DELETE = 'DELETE' self.__INSERT = 'INSERT' self.__WIDTH = 800 self.__HEIGHT = 600 self.__SQL_INPUT_HEIGHT = 100 def __init_ui(self): self.setLayout(self.__init_layout()) self.__setup_event_handlers() self.setWindowTitle(self.__TITLE) self.setFixedWidth(self.__WIDTH) self.setFixedHeight(self.__HEIGHT) self.setModal(True) self.__action_dict = self.__setup_output_creation() def __init_sql_template_button_layout(self) -> QHBoxLayout: self.__select_button = QPushButton(self.__SELECT) self.__update_button = QPushButton(self.__UPDATE) self.__delete_button = QPushButton(self.__DELETE) self.__insert_button = QPushButton(self.__INSERT) hbox_layout = QHBoxLayout() hbox_layout.addWidget(self.__LBL_SQL_TEMPLATES) hbox_layout.addWidget(self.__select_button) hbox_layout.addWidget(self.__update_button) hbox_layout.addWidget(self.__delete_button) hbox_layout.addWidget(self.__insert_button) return hbox_layout def __init_sql_query_layout(self) -> QHBoxLayout: self.__clear_button = QPushButton(self.__CLEAR) self.__go_button = QPushButton(self.__GO) self.__cancel_button = QPushButton(self.__CANCEL) hbox_layout = QHBoxLayout() hbox_layout.addWidget(self.__LBL_SQL_QUERY) hbox_layout.addWidget(self.__go_button) hbox_layout.addWidget(self.__cancel_button) hbox_layout.addWidget(self.__clear_button) return hbox_layout def __init_layout(self) -> QVBoxLayout: self.__sql_input = QPlainTextEdit() self.__sql_input.setFixedHeight(self.__SQL_INPUT_HEIGHT) self.__output = QPlainTextEdit() vbox = QVBoxLayout() vbox.addLayout(self.__init_sql_query_layout()) vbox.addWidget(self.__sql_input) vbox.addLayout(self.__init_sql_template_button_layout()) vbox.addWidget(self.__output) return vbox def __setup_event_handlers(self): self.__cancel_button.clicked.connect(self.close) self.__select_button.clicked.connect(self.__populate_select_template) self.__go_button.clicked.connect(self.__execute_query) self.__clear_button.clicked.connect(self.__clear_query_input) self.__update_button.clicked.connect(self.__populate_update_template) self.__delete_button.clicked.connect(self.__populate_delete_template) self.__insert_button.clicked.connect(self.__populate_insert_template)