Как получить всю информацию, относящуюся к определенному поиску из базы данных - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу создать кнопку поиска для своего проекта, чтобы получить всю информацию, относящуюся к определенному поиску, т.е. если в базе данных есть два похожих имени, говорящих «Purba» (sqlite3), то после нажатия кнопки поиска оба сведения о пользователях должны отображаться в списке в отдельных строках.

Мой код показывает предупреждающее сообщение, если искомые данные отсутствуют в базе данных, но отображает информацию только об одном пользователе (скажем, по имени) purba "и фамилия" paik ") из базы данных, даже если в базе данных существует другой пользователь (скажем, с именем" purba "и фамилией" das "). Я хочу, чтобы в моем коде отображалась информация обо всех пользователях, связанных с определенным поиском, вместе с предупреждением, если искомые данные отсутствуют в базе данных.

Ниже приведен код для извлечения данных из базы данных:

 def search(self,EmpID="",Firstname="",Lastname="",DOB="",Age="",Gender="",Address="",Marital_Status="",Email="",Mobile=""):
        print("Database:search method called",EmpID)
        con=sqlite3.connect("Employee.db")
        cur=con.cursor()
        cur.execute("select * from employee where EmpID=? or Firstname=? or Lastname=? or DOB=? or Age=? 
          or Gender=? \
                        or Address=? or Marital_Status=? or Email=? or Mobile=?",(EmpID,Firstname,Lastname,DOB,Age,Gender,Address,Marital_Status,Email,Mobile))
        if(cur.fetchone()) is not None:
            row=cur.fetchall()
            con.close()
            print(EmpID,"Database:search method finished\n")
            return row
        else:
            tkinter.messagebox.showwarning("EMPLOYEE MANAGEMENT SYSTEM","doesn't exist") 

Ниже приведен код для выполнения информации в списке:

def SearchDatabase():
            print("employee:search method called")
            for row in p.search(EmpId.get(),firstname.get(),lastname.get(),dob.get(),age.get(),\
                                gender.get(),address.get(),marsta.get(),email.get(),mobile.get()):
                    Emplist.insert(END,row,str(""))
            print("employee:search method finished\n")

1 Ответ

0 голосов
/ 10 февраля 2020

Вы не должны вызывать fetchone() и fetchall(), так как fetchone() извлечет одну запись из набора результатов. Затем fetchall() получит остаток, который не включает первую запись.

Достаточно просто позвонить fetchall():

def search(self,EmpID="",Firstname="",Lastname="",DOB="",Age="",Gender="",Address="",Marital_Status="",Email="",Mobile=""):
  print("Database:search method called",EmpID)
  con=sqlite3.connect("Employee.db")
  cur=con.cursor()
  cur.execute("""select * from employee \
                 where EmpID=? or Firstname=? or Lastname=? or DOB=? or Age=? \
                    or Gender=? or Address=? or Marital_Status=? or Email=? or Mobile=?""",
                 (EmpID,Firstname,Lastname,DOB,Age,Gender,Address,Marital_Status,Email,Mobile))
  row = cur.fetchall()
  if len(row) > 0:
      print('found')
  else:
      messagebox.showwarning("EMPLOYEE MANAGEMENT SYSTEM","doesn't exist")
  con.close()
  print(EmpID,"Database:search method finished")
  return row
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...