【问题标题】:Error while fetching data from MySql Database in python在 python 中从 MySql 数据库中获取数据时出错
【发布时间】:2020-12-18 16:15:31
【问题描述】:

我正在尝试使用 Python 中的 WHERE 子句从 Mysql 数据库中获取密码并将密码存储在变量“DbPassword”中,但是当我打印“DbPassword”时,它会打印“None” 谁能解释为什么会这样,我该如何解决? 谢谢I have attached a ScreenShot of my IDE where the entire function and Output can be seen

def searchdb(self):        
    User = (self.Username.get())
    pas = (self.Password.get())
   
    myconn = mysql.connector.connect(host = "localhost", user = "root", passwd = "qwerty321", database = "admin")
    
    if len(User) == 0 and len(pas) == 0 :
       tkinter.messagebox.showinfo("Pharmacy Management System","Please fill in the Login Details")
    elif len(User) == 0 and len(pas) != 0 :
        tkinter.messagebox.showinfo("Pharmacy Management System","Please Enter a Username")
    elif len(User) != 0 and len(pas) == 0:
         tkinter.messagebox.showinfo("Pharmacy Management System","Please enter a Password")
    else:
        try:
            #seacrch data
            #print("%s\n%s"%(User,pas) )
            
            sql = "SELECT password FROM users WHERE user_name = '%s'"
            cur = myconn.cursor()
            cur.execute(sql,(User))
           
            DbPassword = cur.fetchone()
            
            print("%s"%(DbPassword))
            
            if (pas == str(DbPassword)) :
                self.btnRegistration.config(state=NORMAL)
                self.btnHospital.config(state=NORMAL)
            else:
                tkinter.messagebox.askokcancel("Pharmacy Management System","You have entered an invalid login details")
                self.btnRegistration.config(state=DISABLED)
                self.btnHospital.config(state=DISABLED)
                self.Username.set("")
                self.Password.set("")
                self.txtUsername.focus()
        except Error as e:
               # tkinter.messagebox.showinfo("Pharmacy Management System","NO RECORD FOUND !")
                myconn.rollback()
                Window1.Reset(self)
    myconn.close()

【问题讨论】:

  • 你能把print(e)添加到except块中,然后edit输出问题吗?
  • 什么是User,试试这个cur.execute(sql,(User,))
  • @snakecharmerb 添加了 print(e) 输出没有变化,我已经上传了截图请看一下。
  • @CoolCloud User' 是登录时输入的用户名,使用这个 'User' 来搜索数据库,无论 'User' 是否注册。 'pas' 也是登录时输入的密码 ''pas' 将与存储在数据库中的密码进行比较,获取并存储在 DbPassword 中。
  • 你也可以像sql = "SELECT password FROM users WHERE user_name = %s"一样删除''

标签: python mysql tkinter passwords where-clause


【解决方案1】:

终于得到了答案做了一些改动 修改:sql = "SELECT password FROM users WHERE user_name = '%s'" cur.execute(sql,(User)) 至:sql = "SELECT password FROM users WHERE email= '"+ self.Username.get() +"'" cur.execute(sql) 它正在按预期工作。

【讨论】:

  • 这是不安全的,因为它对SQL注入开放,建议改用参数替换
  • 试试c.execute("SELECT password FROM users WHERE user_name = %s", (self.Username.get(),)) 我认为它会起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 2014-10-18
相关资源
最近更新 更多