Python面相对象案例熟悉对MySQL的操作
案例一,学生管理系统
对数据表的要求:
在mysql中创建数据库gamedb,创建用户表userinfo,字段如下:
用户编号uid(int,主键,自动增长)
用户姓名uname(varchar(20),非空)
用户昵称nickname(varchar(20),非空,唯一约束)
用户密码upass(varchar(20),非空)
用户积分score(int,非空)
代码实现:
import pymysql
class PlayUserinfo:
def __init__(self):
self.conn = pymysql.connect(
host='localhost',
port=3307,
db='testdb',
user='root',
password='123456',
charset='utf8'
)
self.cursor = self.conn.cursor()
def selectAll(self):
sql = 'SELECT * FROM userinfo'
self.cursor.execute(sql)
rows = self.cursor.fetchall()
print("userinfo的数据如下:")
for row in rows:
print(f"ID:{row[0]}\t姓名:{row[1]}\t性别:{row[2]}\t年龄:{row[3]}")
def delName(self):
delName = input("请输入要删除的学生姓名:")
sql = "DELETE FROM userinfo WHERE uname = %s"
self.cursor.execute(sql, (delName,))
if self.cursor.rowcount > 0:
self.conn.commit()
print("删除成功")
else:
print("查无此人")
self.selectAll()
def addUser(self):
userId = int(input("请输入用户id:"))
userName = input("请输入用户姓名:")
userSex = input("请输入用户性别:")
userAge = int(input("请输入用户年龄:"))
# 写sql语句
sql = "INSERT INTO userinfo(uid, uname, usex, uage) values (%s, %s, %s, %s)"
self.cursor.execute(sql, (userId, userName, userSex, userAge))
print(f"你已经成功添加\nid为:{userId},姓名为:{userName},性别为:{userSex}, 年龄为:{userAge}的用户信息")
self.conn.commit()
def updateUser(self):
choose = int(input("请输入你的选择[1(改id) or 2(改姓名)]:"))
if choose == 1:
sql1 = "UPDATE userinfo SET uid = %s WHERE uname = %s "
userName = input("请输入需要修改的用户姓名:")
updId = int(input(f"请输入用户{userName}的新id:"))
data_updId = (updId, userName)
self.cursor.execute(sql1, data_updId)
print(f'已成功将{userName}的id更新为{updId}')
self.conn.commit()
elif choose == 2:
sql2 = "UPDATE userinfo SET uname = %s WHERE uname = %s "
userName1 = input("请输入需要修改的用户姓名:")
updName = input(f"请输入用户{userName1}的新name:")
data_updName = (updName, userName1)
self.cursor.execute(sql2, data_updName)
print(f'已成功将{userName1}的id更新为{updName}')
self.conn.commit()
else:
print("程序有待扩展,敬请期待!")
exit(0)
print('修改后再次查询:')
self.selectAll()
def outApp(self):
print("欢迎下次回来!!!")
exit(0)
if __name__ == '__main__':
app = PlayUserinfo()
while True:
print("==========学生信息系统============\n1.查询全部信息\n2.输入名称删除对应的数据\n3.添加用户信息\n4.修改用户\n5.退出\n请输入你的选择[1 or 2 or 3 or 4 or 5 ]")
xz = int(input("请输入你想操作的序号:"))
num = [1, 2, 3, 4]
if xz not in num:
print("操作序号输入错误,按y重新输入,按n退出程序:")
an = input("重新输入(按y)or退出(按n):")
if an == 'n':
print("已经安全退出,欢迎下次使用")
exit()
elif an == 'y':
print("已经重新加载")
else:
if xz == 1:
print("欢迎使用查询全部信息:")
app.selectAll()
elif xz == 2:
print("欢迎使用按姓名删除:")
app.delName()
elif xz == 3:
print("欢迎使用添加用户:")
app.addUser()
elif xz == 4:
print("欢迎使用修改用户")
app.updateUser()
else:
print("您已经退出系统,欢迎下次使用:")
app.outApp()
案例二,模拟注册与用户登录
循环显示如下菜单:
1.注册新的游戏账号
2.显示所有游戏账号
3.按昵称删除游戏账号
4.退出
按下不同的选项就执行相应的功能
任务2:\模拟游戏登录功能,先提示输入昵称和密码,然后判断是否登录成功。
1.果输入错误则提示登录失败,累计3次就强制结束程序。
2.如果输入正确的昵称和密码则提示登录成功,并循环显示如下菜单:
1)查看自己的积分
2)修改自己的密码
3)退出
按下不同的选项就执行相应的功能
代码实现:
import pymysql
class CreateUserinfo:
def __init__(self):
self.conn = pymysql.connect(
host='localhost',
port=3307,
db='testdb',
user='root',
password='123456',
charset='utf8'
)
self.cursor = self.conn.cursor()
def createTable(self):
sql = """
CREATE TABLE IF NOT EXISTS gameuserinfo1(
uid INT AUTO_INCREMENT PRIMARY KEY,
uname VARCHAR(20) NOT NULL,
nickname VARCHAR(20) NOT NULL,
upass VARCHAR(20) NOT NULL,
score INT NOT NULL
)
"""
self.cursor.execute(sql)
# 插入数据
sql1 = "INSERT INTO gameuserinfo1 (uname, nickname, upass, score) VALUES ('小小', 'qq', '123456', 0)"
sql2 = "INSERT INTO gameuserinfo1 (uname, nickname, upass, score) VALUES ('大大', 'wx', '123', 100)"
self.cursor.execute(sql1)
self.cursor.execute(sql2)
self.conn.commit()
print("创建并插入数据成功")
def selectAll(self):
sql = 'SELECT * FROM gameuserinfo1'
self.cursor.execute(sql)
rows = self.cursor.fetchall()
print("所有游戏号的数据如下:")
for row in rows:
print(f"ID:{row[0]}\t姓名:{row[1]}\t昵称:{row[2]}\t密码:******\t积分:{row[4]}")
def delName(self):
delName = input("请输入要删除的账号昵称:")
sql = "DELETE FROM gameuserinfo1 WHERE nickname = %s"
self.cursor.execute(sql, (delName,))
if self.cursor.rowcount > 0:
self.conn.commit()
print("删除成功")
else:
print("该账号未注册!")
self.selectAll()
def addUser(self):
userName = input("请输入新用户姓名:")
userNickname = input("请输入新用户昵称:")
userPassw = input("请输入新用户密码:")
newScore = 0
sql = "INSERT INTO gameuserinfo1 (uname, nickname, upass, score) VALUES (%s, %s, %s, %s)"
self.cursor.execute(sql, (userName, userNickname, userPassw, newScore))
self.conn.commit()
print(f"你已经成功注册姓名为:{userName}, 昵称为:{userNickname}的账号, 请牢记你的密码:{userPassw}")
class ForUser:
def __init__(self):
self.conn = pymysql.connect(
host='localhost',
port=3307,
db='testdb',
user='root',
password='123456',
charset='utf8'
)
self.cursor = self.conn.cursor()
def dengLu(self):
count = 0
nick = input("请输入昵称:")
sql = 'SELECT upass FROM gameuserinfo1 WHERE nickname = %s'
self.cursor.execute(sql, (nick,))
password = self.cursor.fetchall()
if not password:
print("该昵称未注册!")
return
while count < 3:
pasw = input("请输入密码:")
if pasw == password[0][0]:
print('登录成功!')
return
else:
count += 1
print('你输入的密码有错误!')
print("你已经尝试了3次仍未登录成功,已退出登录")
exit(0)
def selectScore(self):
nick = input("请输入你的昵称:")
sql = 'SELECT score FROM gameuserinfo1 WHERE nickname = %s'
self.cursor.execute(sql, (nick,))
Score = self.cursor.fetchall()
if Score:
print("你账户的积分为:", Score[0][0])
else:
print("该昵称未注册!")
def updateUser(self):
choose = int(input("请输入你的选择[1(改昵称) or 2(改密码)]:"))
if choose == 1:
sql1 = "UPDATE gameuserinfo1 SET nickname = %s WHERE uname = %s"
userName = input("请输入需要修改的用户姓名:")
updNickname = input(f"请输入用户{userName}的新昵称:")
data_updId = (updNickname, userName)
self.cursor.execute(sql1, data_updId)
self.conn.commit()
print(f'已成功将{userName}的昵称更新为{updNickname}')
elif choose == 2:
sql2 = "UPDATE gameuserinfo1 SET upass = %s WHERE uname = %s"
userName1 = input("请输入需要修改的用户姓名:")
updPass = input(f"请输入用户{userName1}的新密码:")
data_updName = (updPass, userName1)
self.cursor.execute(sql2, data_updName)
self.conn.commit()
print(f'已成功将{userName1}的密码更新为{updPass}')
else:
print("无效的选择!")
print('修改后再次查询:')
self.selectAll()
def outApp(self):
print("欢迎下次回来!!!")
exit(0)
def selectAll(self):
sql = 'SELECT * FROM gameuserinfo1'
self.cursor.execute(sql)
rows = self.cursor.fetchall()
print("所有游戏号的数据如下:")
for row in rows:
print(f"ID:{row[0]}\t姓名:{row[1]}\t昵称:{row[2]}\t密码:******\t积分:{row[4]}")
if __name__ == '__main__':
app = CreateUserinfo()
app2 = ForUser()
app.createTable() # 创建表格并插入初始数据
app.selectAll()
while True:
print("==========数据库后端管理&&用户操作系统============\n---------数据库后端管理部分------------\n1.创建新的数据表\n"
"2.查看所有用户信息\n3.删除用户信息\n4.注册用户信息\n---------用户操作系统------------\n5.使用登录界面\n6.查看账户的积分\n7.用户账号设置\n8.退出系统"
"\n请输入你的选择[1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 ]")
xz = int(input("请输入你想操作的序号:"))
num = [1, 2, 3, 4, 5, 6, 7, 8]
if xz not in num:
print("操作序号输入错误,按y重新输入,按n退出程序:")
an = input("重新输入(按y)or退出(按n):")
if an == 'n':
print("已经安全退出,欢迎下次使用")
exit(0)
elif an == 'y':
print("已经重新加载")
continue
if xz == 1:
print("欢迎使用创建数据表:")
app.createTable()
elif xz == 2:
print("欢迎使用查看所有用户信息:")
app.selectAll()
elif xz == 3:
print("欢迎使用删除用户信息:")
app.delName()
elif xz == 4:
print("欢迎使用注册用户信息")
app.addUser()
elif xz == 5:
print("欢迎使用登录界面")
app2.dengLu()
elif xz == 6:
print("欢迎使用查看积分界面")
app2.selectScore()
elif xz == 7:
print("欢迎使用修改用户信息界面")
app2.updateUser()
elif xz == 8:
print("退出系统")
app2.outApp()