# 创建数据库
import pymysql
db = pymysql.connect(host='localhost', user='root', password='', database="collect", 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='', database="collect", 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='', database="collect", 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() # 调用主循环方法