Как правильно извлечь записи из бд и добавить их в QTableWidget

Проблема в том, что если в записи есть где-то запятая, в каком-то столбце, то получается запись на 1 столбец больше

вывод print(result):

[
    (1234567890, '89997830599 ', 'г. Тула, проспект Ленина 112 ', '20.11.2012'), 
    (2131231333, '89434231132 ', None, None), 
    (3131131233, '543242321 ', None, None), 
    (8976543210, '89993215487 ', 'г. Москва, улица Свободы 24 ', '21.02.2002'), 
    (9876543210, '89993321145 ', 'г. Калуга, улица Мира ', '21.02.2015')
] 

Правый столбик должен быть левее,  а точнее в 3 поле Как извлечь записи из бд и добавить их в виджет QTableWidget?

print(result)

class Chief_Engineer_Main_Window(QtWidgets.QMainWindow):
     #инициализация
    def __init__(self):
        super(Chief_Engineer_Main_Window, self).__init__()
        self.ui = Ui_Chief_Engineer_Main_Window()
        self.ui.setupUi(self)

        #кнопка "Показать таблицу"
        self.ui.pushButton.clicked.connect(self.show_table)
        
        #кнопка "Добавить запись"
        self.ui.pushButton_2.clicked.connect(self.show_add_record_window)

        #кнопка "Удалить запись"
        self.ui.pushButton_3.clicked.connect(self.show_delete_record_window)

        #кнопка "Изменить запись"
        self.ui.pushButton_4.clicked.connect(self.show_change_window)
        
         #кнопка "Запрос"
        self.ui.pushButton_5.clicked.connect(self.show_query_desugner)


    def show_add_record_window(self):
            self.add = Chief_Engineer_Add_Record()
            self.add.show()
    
    def show_delete_record_window(self):
            self.add = Chief_Engineer_Delete_Record()
            self.add.show()

    def show_change_window(self):
        self.add = Chief_Engineer_Change_Record()
        self.add.show()

    def show_query_desugner(self):
        self.add = Query_Designer()
        self.add.show()

      
        #кнопка "Показать таблицу"
    def show_table(self):
        #получаем название выбранной таблицы
        selected_table=(str(self.ui.comboBox.currentText()))
        #названия столбцов
        name_columns=column_names(selected_table)
        #количество строк
        count_rows=(count_record(selected_table))
        print(count_rows)
        #количество столбцов
        count_columns=len((name_columns))
        #получение записей в таблице
        records=records_from_the_database(selected_table)
        print(records)
        #добавление записей из таблицы на форму
        self.tab(count_columns,count_rows,name_columns,records) 


    #таблица 
    def tab(self,columns,rows,name_columns,records):
        self.ui.tableWidget.setColumnCount(columns)
        self.ui.tableWidget.setRowCount(rows)
        # заголовки для столбцов.
        self.ui.tableWidget.setHorizontalHeaderLabels((name_columns))
        for i in range(columns):
            self.ui.tableWidget.horizontalHeaderItem(i).setTextAlignment(Qt.AlignLeft)  
        #вывод записей
        print(records)
        row = 0
        for tup in (records):
            col = 0
            for item in tup:
                cellinfo = QTableWidgetItem(item)
                self.ui.tableWidget.setItem(row, col, cellinfo)    
                col += 1
            row += 1 
        self.ui.tableWidget.resizeColumnsToContents()

        header = self.ui.tableWidget.horizontalHeader()      
        for i in range(columns): 
            header.setSectionResizeMode(i, QtWidgets.QHeaderView.Stretch)
    
 

    #combobox
    def list_of_tables(self,table):
        #фильтрация таблиц
        if 'Руководитель' in table:
            table.remove('Руководитель') 
        if 'Сотрудники' in table:
            table.remove('Сотрудники')  
        if 'sysdiagrams' in table:
            table.remove('sysdiagrams')

        for i in range(len(table)):
            self.ui.comboBox.addItem(table[i])  



#получить данные из таблицы
def records_from_the_database(name_table):
    cursor.execute("""SELECT * FROM """+(name_table ))
    #results = cursor.fetchone()
    results=cursor.fetchall()
    #print("FUNC")
    #print(results)
    for item in range(len(results)):
              #results[item]=str(results[item])
              results[item]=" ".join(str(results[item]).split())
              results[item]=str(results[item])
    #new_arr = [i[1:-2].split(",") for i in results]
    new_arr = [i.strip('(').strip(')').split(', ') for i in results] 
    
    return new_arr



if __name__ == "__main__":

    try:
        #подключение БД
        connection = pypyodbc.connect("Driver={SQL Server};"
                                  "Server=DESKTOP-NBL8O8E\MYSQLSERVER;"
                                  "Database=БТИ;")
        #включаем курсор
        cursor = connection.cursor()
    except:
        print("ERROR")
        #error=Login_Window()
        #error.msgBox()

    #форма
    app = QtWidgets.QApplication([])
    application = Login_Window()
    application.show()
    sys.exit(app.exec())

Ответы (1 шт):

Автор решения: S. Nick

Попробуйте так:

import sys
from PyQt5.Qt import *


class Example(QWidget):
    def __init__(self):
        super().__init__()
        
        self.tableWidget = QTableWidget(0, 4)
        self.tableWidget.setHorizontalHeaderLabels(('ИНН БТИ', 'Телефон', 'Адрес', 'Дата регистрации'))
        
        self.layout = QVBoxLayout(self)
        self.layout.addWidget(self.tableWidget) 
        
        results = [
            (1234567890, '89997830599 ', 'г. Тула, проспект Ленина 112 ', '20.11.2012'), 
            (2131231333, '89434231132 ', None, None), 
            (3131131233, '543242321 ', None, None), 
            (8976543210, '89993215487 ', 'г. Москва, улица Свободы 24 ', '21.02.2002'), 
            (9876543210, '89993321145 ', 'г. Калуга, улица Мира ', '21.02.2015')        
        ]
        rows = len(results)
        columns = len(results[0])
        
        self.tab(columns, rows, results)

    def tab(self, columns, rows, results):
        self.tableWidget.setRowCount(rows)
        self.tableWidget.setColumnCount(columns)

        for i in range(rows):
            for j in range(columns):
                item = QTableWidgetItem("{}".format(results[i][j]))
                item.setTextAlignment(Qt.AlignHCenter)
                self.tableWidget.setItem(i, j, item)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Example()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка