как я подключаю локальную базу данных? - PullRequest
0 голосов
/ 14 сентября 2018

это мой код:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import mysql.connector
import mysql.connector.cursor
from mysql.connector import errorcode
import sys
import os
from os import path
from PyQt5.uic import loadUiType

FORM_CLASS,_ = loadUiType(path.join(path.dirname(__file__),"mainwindow.ui"))

class Main(QMainWindow,FORM_CLASS):
    def __init__(self,parent=None):
        super(Main,self).__init__(parent)
        QMainWindow.__init__(self)
        self.setupUi(self)
        self.InitUI()
        self.Handel_buttons()
        self.Handel_db_connections()

    def InitUI(self):
        ## changes in the run time
        pass

    def Handel_buttons(self):
          ## all buttons in the app
        self.pushButton.clicked.connect(self.add_mahmoud_friends)
        self.pushButton_3.clicked.connect(self.update_mahmoud_friends)
        self.pushButton_2.clicked.connect(self.delete_mahmoud_friends)

    def Handel_db_connections(self):

        try:
            conn = mysql.connector.connect(host='localhost',
                                                       database='mydb',
                                                       user='root',
                                                       password='*******',
                                                       use_pure=True)  # use_pure is set to true
            if conn.is_connected():
                db_Info = conn.get_server_info()
                print("Connected to MySQL database using C extension... MySQL Server version on ", db_Info)
                self.c = conn.cursor()

        except errorcode as e:
            print("Error while connecting to MySQL using C extension", e)
        finally:
            # closing database connection.
            if (conn.is_connected()):


                print("connection is closed")
    ####################################################
    ## mahmoud info


    def add_mahmoud_friends(self):
        mth_friends = self.lineEdit.text()
        self.c.execute('''INSERT INTO mtth (mth_friends) values (%s)''', (mth_friends))

        print("done")

    def update_mahmoud_friends(self):
        pass

    def delete_mahmoud_friends(self):
        pass

def main():
    app= QApplication(sys.argv)
    window =Main()
    window.show()
    app.exec_()

if __name__ == '__main__':
         main()

когда я использовал этот код, соединение устанавливается, но оно вызывает эту ошибку при вставке информации в базу данных SQL, созданную mysql workbench ошибка:

Connected to MySQL database using C extension... MySQL Server version on  8.0.12
connection is closed
Traceback (most recent call last):
  File "/Users/mahmoudtarek/Desktop/mth1/index.py", line 60, in add_mahmoud_friends
    self.c.execute('''INSERT INTO mtth (mth_friends) values (%s)''', (mth_friends))
  File "/Users/mahmoudtarek/PycharmProjects/untitled/venv/lib/python3.7/site-packages/mysql/connector/cursor.py", line 533, in execute
    if not self._connection:
ReferenceError: weakly-referenced object no longer exists

Process finished with exit code 134 (interrupted by signal 6: SIGABRT)

1 Ответ

0 голосов
/ 14 сентября 2018

Что вам нужно сохранить, так это соединитель, с другой стороны, взаимодействие с базой данных может вызвать проблемы, поэтому вы должны использовать try-Кроме того, вы также должны вызвать commit() для выполнения команд.

import sys
import os

from PyQt5 import QtCore, QtGui, QtWidgets, uic
import mysql.connector
from mysql.connector import errorcode

FORM_CLASS, _ = uic.loadUiType(os.path.join(os.path.dirname(__file__),"mainwindow.ui"))

class Main(QtWidgets.QMainWindow, FORM_CLASS):
    def __init__(self,parent=None):
        super(Main,self).__init__(parent)
        self.setupUi(self)
        self.InitUI()
        self.conn = None

        self.handle_buttons()
        self.handle_db_connections()

    def InitUI(self):
        ## changes in the run time
        pass

    def handle_buttons(self):
          ## all buttons in the app
        self.pushButton.clicked.connect(self.add_mahmoud_friends)
        self.pushButton_3.clicked.connect(self.update_mahmoud_friends)
        self.pushButton_2.clicked.connect(self.delete_mahmoud_friends)

    def handle_db_connections(self):
        try:
            self.conn = mysql.connector.connect(
                host='localhost',
                database='mydb',
                user='root',
                password='*******',
                use_pure=True)  # use_pure is set to true

            if self.conn.is_connected():
                db_Info = self.conn.get_server_info()
                print("Connected to MySQL database using C extension... MySQL Server version on ", db_Info)
        except mysql.connector.Error as err:
            print("Error while connecting to MySQL using C extension", err)

    def add_mahmoud_friends(self):
        mth_friends = self.lineEdit.text()
        if self.conn:
            c = self.conn.cursor()
            try:
                c.execute('''INSERT INTO mtth (mth_friends) values (%s)''', (mth_friends,))
                self.conn.commit()
            except mysql.connector.Error as err:
                print("Error: ", err)

    def update_mahmoud_friends(self):
        pass

    def delete_mahmoud_friends(self):
        pass

    def closeEvent(self, event):
        if self.conn:
            self.conn.close()
        super(Main, self).closeEvent(event)


def main():
    app= QtWidgets.QApplication(sys.argv)
    window =Main()
    window.show()
    app.exec_()

if __name__ == '__main__':
    main()
...