Добавление в БД(ms sql server) через python
В классе Add_Record при использовании метода new_record вылетает ошибка при добавлении в БД,данные с формы записываются в self.data, а потом не получается их внести в таблицу
from PyQt5 import QtWidgets
import sys
import pypyodbc
from PyQt5.QtCore import QSize, Qt
from PyQt5.QtWidgets import QTableWidgetItem,QLineEdit, QMessageBox
#главная форма
from my import Ui_MainWindow
from new_record import Ui_MainWindow2
class Add_Record(QtWidgets.QMainWindow):
def __init__(self):
super(Add_Record, self).__init__()
self.ui = Ui_MainWindow2()
self.ui.setupUi(self)
self.list_of_tables()
#кнопка "Выбрать таблицу"
self.ui.pushButton_2.clicked.connect(self.selected)
#кнопка "Добавить запись"
self.ui.pushButton.clicked.connect(self.new_record)
def selected(self):
#получаем название выбранной таблицы
self.selected_table=(str(self.ui.comboBox.currentText()))
#названия столбцов
self.name_columns=column_names(self.selected_table)
print(self.name_columns)
self.ui.tableWidget.setRowCount(len(self.name_columns))
self.ui.tableWidget.setColumnCount(2)
row=0
for item in self.name_columns:
cellinfo = QTableWidgetItem(item)
self.ui.tableWidget.setItem(row, 0, cellinfo)
row += 1
#self.ui.tableWidget.resizeColumnsToContents()
def new_record(self):
self.data=[]
for i in range(len(self.name_columns)):
self.data.append(self.ui.tableWidget.item(i, 1).text() )
#print(self.ui.tableWidget.item(i, 1).text())
print(self.data)
record=''
for i in range(len(self.name_columns)):
if i==len(self.name_columns)-1:
record=record+self.data[i]
else:
record=record+self.data[i]+","
print(record)
mySQLQuery = f"INSERT INTO dbo.Руквоводитель (ИНН_БТИ,ID_руководителя,Серия_и_номер_паспорта,ФИО,Образоване,Мобильный_телефон) VALUES ('{self.data[0]},{self.data[1]},{self.data[2]},{self.data[3]},{self.data[4]},{self.data[5]}) "
cursor.execute(mySQLQuery)
# дать согласие на выполнение команды
connection.commit();
#combobox
def list_of_tables(self):
#получение списка таблиц =results,results1-промежуточная
results1 = name_table()
#список таблиц без скобок и кавычек
results = []
for i in results1:
results.append(i[0])
#загрузка combobox
for i in range(len(results)):
self.ui.comboBox.addItem(results[i])
class Main_Window(QtWidgets.QMainWindow):
def __init__(self):
super(Main_Window, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
#кнопка "Показать таблицу"
self.ui.pushButton.clicked.connect(self.show_table)
#кнопка "Добавить запись"
self.ui.pushButton_2.clicked.connect(self.show_add_record)
def show_add_record(self):
self.w2 = Add_Record()
self.w2.show()
#кнопка "Показать таблицу"
def show_table(self):
#получаем название выбранной таблицы
selected_table=(str(self.ui.comboBox.currentText()))
#названия столбцов
name_columns=column_names(selected_table)
#количество строк
count_rows=count_table(selected_table)
#количество столбцов
count_columns=len((name_columns))
#получение записей в таблице
records=records_from_the_database(selected_table)
#добавление записей из таблицы на форму
application.tab(count_columns,count_rows[0],name_columns,records)
#combobox
def list_of_tables(self,table):
for i in range(len(table)):
self.ui.comboBox.addItem(table[i])
#таблица
def tab(self,columns,rows,columns_name,records):
print(columns,rows)
self.ui.tableWidget.setColumnCount(columns)
self.ui.tableWidget.setRowCount(rows)
# заголовки для столбцов.
self.ui.tableWidget.setHorizontalHeaderLabels((columns_name))
for i in range(columns):
self.ui.tableWidget.horizontalHeaderItem(i).setTextAlignment(Qt.AlignLeft)
#вывод записей
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()
# получить названия таблиц
def name_table():
mySQLQuery = ("SELECT TABLE_NAME FROM information_schema.tables")
cursor.execute(mySQLQuery)
results = cursor.fetchall()
arr = list(results)
arr.pop(len(arr) - 1)
return arr
#названия столбцов
def column_names(table):
#print(table)
cursor.execute("SELECT COLUMN_NAME FROM БТИ.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '"+(table)+"'")
results1 = cursor.fetchall()
results = []
for i in results1:
results.append(i[0])
#print(results)
return results
#количество записей в таблице(количество строк в таблице)
def count_table(table):
print(table)
cursor.execute("SELECT COUNT(*) FROM "+(table))
results1 = cursor.fetchall()
results = []
for i in results1:
results.append(i[0])
#print(results)
return results
#получить данные из таблицы
def records_from_the_database(name_table):
cursor.execute("""SELECT * FROM """+(name_table ))
results = cursor.fetchall()
for item in range(len(results)):
results[item]=str(results[item])
results[item]=" ".join(results[item].split())
results[item]=str(results[item])
new_arr = [i[1:-2].split(", ") for i in results]
return new_arr
global application
if __name__ == "__main__":
#подключение БД
connection = pypyodbc.connect("Driver={SQL Server};"
"Server=DESKTOP-NBL8O8E;"
"Database=БТИ;")
#включаем курсор
cursor = connection.cursor()
#получение списка таблиц =results,results-промежуточная
results1 = name_table()
#список таблиц без скобок и кавычек
results = []
for i in results1:
results.append(i[0])
#форма
app = QtWidgets.QApplication([])
application = Main_Window()
application.list_of_tables(results)
application.show()
sys.exit(app.exec())
# закрыть бд
connection.close()