#創建數據庫 import pymysql db =pymysql.connect(host='localhost',user='root',password='L3918374',database="xinji_inf",charset='utf8') #使用cursor()方法創建一個游標對象 cursor = db.cursor() #如果存在則刪除 cursor.execute("DROP TABLE IF EXISTS AccountPassword") sql =""" CREATE TABLE AccountPassword( class VARCHAR(50) NOT NULL, name VARCHAR(50) NOT NULL, number VARCHAR(50) NOT NULL ) """ #執行sql語句 cursor.execute(sql) db.close()
界面
import pymysql import wx class MyFrame(wx.Frame): def __init__(self,parent,id): wx.Frame.__init__(self,parent,id,'班級信息收集',size=(400,300)) #創建面板 panel = wx.Panel(self) #創建“保存”和“查詢”按鈕,並綁定事件 self.bt_storage = wx.Button(panel,label="保存") self.bt_storage.Bind(wx.EVT_BUTTON,self.OnclickStorage) self.bt_inquire = wx.Button(panel,label ='查詢') self.bt_inquire.Bind(wx.EVT_BUTTON,self.OnclickInquire) #創建文本,左對齊 self.title =wx.StaticText(panel,label ="保存信息請輸入用戶的學號班級和姓名\n\t查詢請輸入姓名或學號") self.label_class =wx.StaticText(panel,label ="班級:") self.text_class =wx.TextCtrl(panel,style =wx.TE_LEFT) self.label_user =wx.StaticText(panel,label ="姓名:") self.text_user =wx.TextCtrl(panel,style =wx.TE_LEFT) self.label_number = wx.StaticText(panel,label ="學號:") self.text_number = wx.TextCtrl(panel,style =wx.TE_LEFT) #添加容器,容器中控件橫向排列 hsizer_class =wx.BoxSizer(wx.HORIZONTAL) hsizer_class.Add(self.label_class,proportion=0,flag=wx.ALL,border=5) hsizer_class.Add(self.text_class,proportion=1,flag=wx.ALL,border=5) hsizer_user = wx.BoxSizer(wx.HORIZONTAL) hsizer_user.Add(self.label_user,proportion=0,flag=wx.ALL,border=5) hsizer_user.Add(self.text_user,proportion=1,flag =wx.ALL,border=5) hsizer_number =wx.BoxSizer(wx.HORIZONTAL) hsizer_number.Add(self.label_number,proportion=0,flag=wx.ALL,border=5) hsizer_number.Add(self.text_number,proportion=1,flag=wx.ALL,border=5) hsizer_button =wx.BoxSizer(wx.HORIZONTAL) hsizer_button.Add(self.bt_storage,proportion=0,flag=wx.ALIGN_CENTER,border=5) hsizer_button.Add(self.bt_inquire,proportion=0,flag=wx.ALIGN_CENTER,border=5) #添加容器,容器中的控件縱向排列 vsizer_all = wx.BoxSizer(wx.VERTICAL) vsizer_all.Add(self.title,proportion=0,flag=wx.BOTTOM |wx.TOP |wx.ALIGN_CENTER,border=15) vsizer_all.Add(hsizer_class,proportion=0,flag=wx.EXPAND |wx.LEFT |wx.RIGHT,border=45) vsizer_all.Add(hsizer_user,proportion=0,flag=wx.EXPAND |wx.LEFT |wx.RIGHT,border=45) vsizer_all.Add(hsizer_number,proportion=0,flag=wx.EXPAND |wx.LEFT |wx.RIGHT,border=45) vsizer_all.Add(hsizer_button,proportion=0,flag=wx.ALIGN_CENTER |wx.TOP,border=15) panel.SetSizer(vsizer_all) def OnclickStorage(self,event): "單擊保存按鈕" #連接數據庫 db =pymysql.connect(host='localhost',user='root',password='L3918374',database="xinji_inf",charset='utf8') message ="" classname =self.text_class.GetValue() #獲取輸入的班級 username =self.text_user.GetValue() #獲取輸入的用戶名 number =self.text_number.GetValue() #獲取輸入的學號 #使用cursor()方法創建一個游標對象 cursor = db.cursor() #判斷是否為空 if classname =="" or username =="" or number =="": message ='班級或名字或密碼不能為空' else: #數據列表 data = [(classname,username,number)] try: #執行sql語句,插入數據 sql="insert into accountpassword(class, name, number) values(%s,%s,%s)" cursor.executemany(sql,data) #提交數據 db.commit() message ='保存成功' #保存成功 except: #發生錯誤時回滾 db.rollback() #關閉連接 db.close() wx.MessageBox(message) #彈出提示框 def OnclickInquire(self,event): "單擊查詢按鈕" username =self.text_user.GetValue() #獲取輸入的用戶名 number =self.text_number.GetValue() #獲取輸入的學號 db =pymysql.connect(host='localhost',user='root',password='L3918374',database="xinji_inf",charset='utf8') #使用cursor()方法創建一個游標對象 cursor = db.cursor() sql ="" message ="" if username !="" and number !="": #輸入學號和姓名判斷是否匹配 sql ="SELECT * FROM ACCOUNTPASSWORD \ WHERE NUMBER = %s" #查找學號 try: #執行sql語句 cursor.execute(sql,number) #獲取記錄 results =cursor.fetchall() if results: for row in results: classname = row[0] username_sql =row[1] number_sql =row[2] if username_sql == username: message ="班級:{}\n姓名:{}\n學號:{}\n".format(classname,username_sql,number_sql) else: message ="姓名與學號不匹配" except: message = "沒有該學號" elif username !="" and number =="": sql ="SELECT * FROM ACCOUNTPASSWORD \ WHERE NAME = %s" #找到該名字 try: #執行sql語句 cursor.execute(sql,username) #獲取記錄 results =cursor.fetchall() #輸出對應的信息 for row in results: classname = row[0] username =row[1] number =row[2] message ="班級:{}\n姓名:{}\n學號:{}\n".format(classname,username,number) except: message ="沒有這個名字" #數據錯誤-- elif number !="" and username =="": sql ="SELECT * FROM ACCOUNTPASSWORD \ WHERE NUMBER = %s" #查找學號,同上 try: #執行sql語句 cursor.execute(sql,number) #獲取記錄 results =cursor.fetchall() for row in results: classname = row[0] username =row[1] number =row[2] message ="班級:{}\n姓名:{}\n學號:{}\n".format(classname,username,number) except: message ="沒有這個學號" else: message ="班級或名字或密碼不能為空" #關閉數據庫 db.close() wx.MessageBox(message) if __name__ =='__main__': app = wx.App() #初始化應用 frame = MyFrame(parent=None, id=-1) #實例MyFrame類,並傳遞參數 frame.Show() #顯示窗口 app.MainLoop() #調用主循環方法
結果: