学生管理系统:
1、主要字段:stu_name、stu_age、stu_tel(学生姓名,年龄,电话)
2、菜单功能有:
(1)学生信息添加
(2)学生信息删除
(3)学生信息展示
(4)退出学生管理系统
步骤一:
-- 在数据库中创建test库
creste database if not exists test;
--使用test数据库
use test;
-- 创建表
CREATE TABLE student_info (
name varchar(30),
age int,
tel int
);
步骤二:
在pycharm里面如图穿件文件夹然后再创建py文件
- conf.py
# 配置文件conf.py
host = 'localhost'#这个是主机ip,默认本机是127.0.0.1或者localhost
port = 3306 #mysql端口
user = 'root'
passwd = '123456'
database = 'test'
charset = 'utf8'
- mysql_util.py文件
# mysql_util.py文件
# -------------------------以下代码都是固定的-------------------------------
import pymysql
from config import conf
import time
class MySqlUtil:
def __init__(
self,
host=conf.host,
port=conf.port,
user=conf.user,
passwd=conf.passwd,
database=conf.database,
charset=conf.charset
):
self.host = host
self.port = port
self.user = user
self.passwd = passwd
self.database = database
self.charset = charset
# 创建连接
self.conn = pymysql.connect(
host=self.host,
port=self.port,
user=self.user,
passwd=self.passwd,
database=self.database,
charset=self.charset
)
# 创建游标
self.cur = self.conn.cursor()
# -------------------------以上代码都是固定的-------------------------------
#检查表是否存在
def check_table_exist(self, table_name):
sql = f'show tables;'
self.cur.execute(sql)
data = self.cur.fetchall()
if (table_name,) in data:
return True
else:
return False
def show_data(self,table_name):
if self.check_table_exist(table_name):
sql=f'select * from {table_name}'
self.cur.execute(sql)
data=self.cur.fetchall()
for i in data:
print(i)
else:
print('表不存在')
def add_data(self,table_name,add_values):
if self.check_table_exist(table_name):
sql=f"insert into {table_name} values ('{add_values[0]}', {add_values[1]}, {add_values[2]});"
self.cur.execute(sql)
self.conn.commit()
# sql = f"insert into {table_name} values({add_values[0]},{add_values[1]},{add_values[2]})"
# # 执行sql,加''.1、符串类型的数据被正确地插入到 SQL 语句中SQL 2、注入风险:第二段代码通过引号处理可以有效防止 SQL 注入攻击,因为即使 add_values[0] 中包含 SQL 语句特定字符
# self.cur.execute(sql)
# # 提交
# self.conn.commit()
else:
print('表不存在')
def del_data(self,table_name,tel):
researchsql=f'select * from {table_name} where tel={tel}'
self.cur.execute(researchsql)
data = self.cur.fetchall()
if data>0:
sql=f"delete from {table_name} where tel={tel}"
self.cur.execute(sql)
self.conn.commit()
else:
print("查无此人")
if __name__ == '__main__':
a=MySqlUtil()
b=a.check_table_exist('student_info1')
print(b)
- main.py
import os
from util.mysql_util1 import MySqlUtil
#这里定义了一个数据库工具,有对象才能操作
mysql_util = MySqlUtil()
'''
学生管理系统:
1、主要字段:stu_name、stu_age、stu_tel(学生姓名,年龄,电话)
2、实现的功能有:
(1)学生信息添加
(2)学生信息删除
(3)学生信息展示
(4)退出学生管理系统
'''
def add_student():
stu_name=input('请输入添加的学生姓名:')
stu_age = int(input('请输入添加的学生年龄:'))
stu_tel = int(input('请输入添加的学生电话:'))
mysql_util.add_data('student_info',(stu_name,stu_age,stu_tel))
def del_student():
tel = int(input('请输入需要删除的学生电话:'))
mysql_util.del_data('student_info',tel)
def show_student():
mysql_util.show_data('student_info')
def show_menu():
print("~~~~~欢迎使用~~~~~~")
print("1. 添加学生信息")
print('2. 删除学生信息')
print("3. 显示所有学生信息")
print("4. 退出程序")
if __name__ == '__main__':
while True:
show_menu()
num=int(input('请输入您的选择:'))
if num == 1:
add_student()
elif num == 2:
del_student()
elif num == 3:
show_student()
elif num == 4:
exit()
else:
print("输入有误!!")
代码遇到的问题
- 如下代码向数据库中添加数据是,输入数据为字符时会要用到单引号;确保了插入数据为字符串类型,并且防止了sql注入,