Как заставить кнопку выполнять sql запрос

Рейтинг: 0Ответов: 2Опубликовано: 22.02.2023

Не понимаю как в 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', }

Ответы

▲ 0Принят

Вы пытаетесь принять в функции 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())
▲ 0

Чтобы получить реальную ошибку запустите ваше приложение в консоли/терминале/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()