Как заставить кнопку выполнять sql запрос
Не понимаю как в PyQt заставить кнопку при нажатии выполнять sql запрос. Я лютый дилетант, но я пытался читать документацию и ничего не понял.
По идее надо передавать в клик кнопки функцию, которая что-то делает, однако при нажатии приложение крашится с кодом - 1073740791 (0xC0000409).
import sys
from dbconfig import dbconfig
import mysql.connector
from PyQt5 import QtWidgets
from PyQt5.uic import loadUi
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
connection = mysql.connector.connect(**dbconfig)
cursor = connection.cursor()
super(MainWindow, self).__init__()
loadUi("interface.ui", self)
self.loadData(cursor, connection)
self.pushButton.clicked.connect(self.buttonclick)
def loadData(self, cursor, connection):
cursor.execute("CREATE DATABASE IF NOT EXISTS testdb")
cursor.execute("USE testdb")
connection.commit()
def buttonclick(self, cursor, connection):
cursor.execute("CREATE TABLE IF NOT EXISTS test (id INT PRIMARY KEY AUTO_INCREMENT, col2 INT)")
connection.commit()
print("success")
def main():
app = QtWidgets.QApplication([])
application = MainWindow()
application.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()
Ничего особенного, просто файл подключения
dbconfig = {'host': '127.0.0.1',
'user': 'root',
'password': '123123', }
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Чтобы получить реальную ошибку запустите ваше приложение в консоли/терминале/CMD.
Я не могу проверить ваше приложение, но попробуйте так:
import sys
from dbconfig import dbconfig
import mysql.connector
from PyQt5 import QtWidgets
from PyQt5.uic import loadUi
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
loadUi("interface.ui", self)
self.pushButton.clicked.connect(self.buttonclick)
# ----> vvvvv <--------------------------------------------------------
self.connection = mysql.connector.connect(**dbconfig)
self.cursor = self.connection.cursor()
# ----> ^^^^^ <--------------------------------------------------------
self.loadData()
def loadData(self):
self.cursor.execute("CREATE DATABASE IF NOT EXISTS testdb")
self.cursor.execute("USE testdb")
self.connection.commit()
def buttonclick(self):
self.cursor.execute("CREATE TABLE IF NOT EXISTS test (id INT PRIMARY KEY AUTO_INCREMENT, col2 INT)")
self.connection.commit()
print("success")
def main():
app = QtWidgets.QApplication([])
application = MainWindow()
application.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()
Автор решения: Aliaksei Lz
→ Ссылка
Вы пытаетесь принять в функции buttonclick cursor и connection, а в бинде их не передаете. попробуйте так:
import sys
from dbconfig import dbconfig
import mysql.connector
from PyQt5 import QtWidgets
from PyQt5.uic import loadUi
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
self.connection = mysql.connector.connect(**dbconfig)
self.cursor = self.connection.cursor()
super(MainWindow, self).__init__()
loadUi("interface.ui", self)
self.loadData()
self.pushButton.clicked.connect(self.buttonclick)
def loadData(self):
self.cursor.execute("CREATE DATABASE IF NOT EXISTS testdb")
self.cursor.execute("USE testdb")
self.connection.commit()
def buttonclick(self):
self.cursor.execute("CREATE TABLE IF NOT EXISTS test (id INT PRIMARY KEY AUTO_INCREMENT, col2 INT)")
self.connection.commit()
print("success")
def main():
app = QtWidgets.QApplication([])
application = MainWindow()
application.show()
sys.exit(app.exec())