Search code examples
pythonmysqlpyqtmysql-pythonmysql-connector-python

Python: Login none error


i'm making a login system for part of my coursework, where it querys the database to see if the data is correct. It works fine until I introduce a login that's not in the database. Is there anyway I can make the while working even after the mycursor.fetchone() gives the error for not fetching anything?

The code below is the subroutine I'm having issues with:

#the error message I'm receiving 
username, password = mycursor.fetchone()
TypeError: 'NoneType' object is not iterable

#the subroutine I'm having trouble with
def accept(self):
        conn = mysql.connector.connect(user, password, host, database)
        #create cursor between python and mysql
        mycursor = conn.cursor()

        query = """
            SELECT 
                username, password 
            FROM 
                UserInfo.User
            WHERE 
                username = %s AND password = %s
        """
        mycursor.execute(query, (self.textName.text(),self.textPass.text(), ))
        global username
        username, password = mycursor.fetchone()        
        #self.textName.text() and self.textPass.text() is the username and password entered by the user
        if username == self.textName.text() and password == self.textPass.text():
            self.GoToLogin()

        else:
            #the error message I want to display
            QtGui.QMessageBox.warning(
                self, 'Error', 'Username and password are incorrect')

Solution

  • Add try except block and ignore the exception that happens when the record is not found or if multiple records are found.

    try:
       #db call
    except (SpecificException, AnotherException):
        pass
    

    It's good to catch specific exceptions than catch all exceptions but in this case you can just catch the global Exception

    Also there is no reason to check again if the user and password are equal, since you're already passing that as part of the query.