Python+MySQL实现基本内容管理
create.sql
-- 如果存在数据库company,删除
DROP DATABASE IF EXISTS company;
-- 创建数据库company
CREATE DATABASE company;
-- 切换到company数据库
USE company;
-- 创建storeman保管员表
CREATE TABLE storeman(
Mno BIGINT NOT NULL,
Mname VARCHAR(100) NOT NULL,
Msex VARCHAR(10) NOT NULL,
Mhouse VARCHAR(10) NOT NULL,
PRIMARY KEY (Mno)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 创建storehouse仓库表
CREATE TABLE storehouse(
Hname VARCHAR(100) NOT NULL,
Hman VARCHAR(100) NOT NULL,
Hgoods VARCHAR(100),
PRIMARY KEY (Hname)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 创建goods商品表
CREATE TABLE goods(
Gname VARCHAR(100) NOT NULL,
Gprice DOUBLE(100,2) NOT NULL,
Ghouse VARCHAR(100) NOT NULL,
PRIMARY KEY (Gname)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 插入storeman保管员表数据
-- 每个保管员可以管理多个仓库
INSERT INTO storeman(Mno,Mname,Msex,Mhouse) VALUES (2821,'李勇','男','仓库1');
INSERT INTO storeman(Mno,Mname,Msex,Mhouse) VALUES (2822,'王林','女','仓库1');
INSERT INTO storeman(Mno,Mname,Msex,Mhouse) VALUES (2824,'张明','男','仓库2');
INSERT INTO storeman(Mno,Mname,Msex,Mhouse) VALUES (2825,'张伟','男','仓库3');
INSERT INTO storeman(Mno,Mname,Msex,Mhouse) VALUES (2828,'李峰','女','仓库2 仓库3');
-- 插入storehouse仓库表数据
-- 每个仓库有若干保管员,每个仓库可以存放多种商品
INSERT INTO storehouse(Hname,Hman,Hgoods) VALUES ('仓库1','李勇 王林','苹果');
INSERT INTO storehouse(Hname,Hman,Hgoods) VALUES ('仓库2','张明 李峰','橘子');
INSERT INTO storehouse(Hname,Hman,Hgoods) VALUES ('仓库3','张伟 李峰','葡萄 柚子');
-- 插入goods商品表数据
-- 每种商品只能放一个仓库
INSERT INTO goods(Gname,Gprice,Ghouse) VALUES ('苹果',5,'仓库1');
INSERT INTO goods(Gname,Gprice,Ghouse) VALUES ('橘子',4,'仓库2');
INSERT INTO goods(Gname,Gprice,Ghouse) VALUES ('葡萄',6,'仓库3');
INSERT INTO goods(Gname,Gprice,Ghouse) VALUES ('柚子',4.5,'仓库3');
sql.py
import pymysql
# 多段sql语句执行,提前分割:.split(';'),sql参数格式为字符串列表
def work(sql):
for line in sql:
print(line)
# 执行sql语句
cursor.execute(line)
print("执行成功")
# 提交到数据库执行
db.commit()
print("\n执行完成")
# 如果发生错误则回滚
def unwork():
db.rollback()
print("\n执行失败")
# 查询storeman保管员表
def select_sm():
sql1 = '''SELECT * FROM storeman;'''
cursor.execute(sql1)
data1 = cursor.fetchall()
print("\n----storeman保管员表----\n工号 | 姓名 | 性别 | 管理仓库")
for data in data1:
print("%4d | %s | %s | %s"%(data[0],data[1],data[2],data[3]))
# 查询storehouse仓库表
def select_sh():
sql2 = '''SELECT * FROM storehouse;'''
cursor.execute(sql2)
data2 = cursor.fetchall()
print("\n----storehouse仓库表----\n仓库名 | 管理员 | 储存商品")
for data in data2:
print("%s | %5s | %5s"%(data[0],data[1],data[2]))
# 查询
def select_g():
sql3 = '''SELECT * FROM goods;'''
cursor.execute(sql3)
data3 = cursor.fetchall()
print("\n----goods商品表----\n商品名 | 价格 | 储存位置")
for data in data3:
print("%s | %.2f | %s"%(data[0],data[1],data[2]))
# 打开数据库连接
db = pymysql.connect(host='127.0.0.1', user='root', passwd="123456")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
while True:
try:
cursor.execute("USE company")
print("成功连接到company数据库")
while True:
a = input("\n指定数据库操作:\n1.查询 2.增加 3.更改 4.删除 5.退出 6.重新创建数据库\n请输入指令编号:")
# 查询(无需提交到数据库运行,可以没有db.commit()函数)
if a == '1':
a = input("\n指定查询内容:\n1.列出所有表格数据\n2.查询工号\n3.查询姓名\n4.查询仓库\n5.查询商品\n6.退出查询\n请输入指令编号:")
# 列出所有数据
if a == '1':
try:
select_sm()
select_sh()
select_g()
db.commit()
print("\n*****注意事项*****\n请核对表中内容是否冲突或有误\n如有上述情况请及时更改")
except:
unwork()
# 查询工号
elif a == '2':
Mno = int(input("\n请输入要查询的工号:"))
sql = '''SELECT * FROM storeman
WHERE Mno=%d'''%Mno
try:
cursor.execute(sql)
data = cursor.fetchall()
if data != ():
data = data[0]
print("\n工号 | 姓名 | 性别 | 管理仓库\n%4d | %s | %s | %s"%(data[0],data[1],data[2],data[3]))
else:
print("\n查询不到当前工号")
except:
unwork()
# 查询姓名
elif a == '3':
Mname = input("\n请输入要查询的姓名:")
sql = '''SELECT * FROM storeman
WHERE Mname="%s"'''%Mname
try:
cursor.execute(sql)
data = cursor.fetchall()
if data != ():
data = data[0]
print("\n工号 | 姓名 | 性别 | 管理仓库\n%4d | %s | %s | %s"%(data[0],data[1],data[2],data[3]))
else:
print("\n查询不到当前姓名")
except:
unwork()
# 查询仓库
elif a == '4':
Hname = input("\n请输入要查询的仓库名或编号:")
# 是否为纯数字的字符串
if Hname.isdigit():
Hname = "仓库"+Hname
sql = '''SELECT * FROM storehouse
WHERE Hname="%s"'''%Hname
try:
cursor.execute(sql)
data = cursor.fetchall()
if data != ():
data = data[0]
print("\n仓库名 | 管理员 | 储存商品\n%s | %5s | %5s"%(data[0],data[1],data[2]))
else:
print("\n查询不到当前仓库")
except:
unwork()
# 查询商品
elif a == '5':
Gname = input("\n请输入要查询商品名:")
sql = '''SELECT * FROM goods
WHERE Gname="%s"'''%Gname
try:
cursor.execute(sql)
data = cursor.fetchall()
if data != ():
data = data[0]
print("\n商品名 | 价格 | 储存位置\n%s | %.2f | %s"%(data[0],data[1],data[2]))
else:
print("\n查询不到当前商品")
except:
unwork()
elif a == '6':
pass
else:
print("\n非法指令,请重新输入")
# 增加
elif a == '2':
a = input("\n指定增加内容所在的表格位置:\n1.保管员表\n2.仓库表\n3.商品表\n请输入指令编号:")
if a == '1':
select_sm()
print("\n请输入以下需要增加的内容")
data = ['']*4
data[0] = int(input("工号(不能重复):"))
data[1] = input("姓名:")
data[2] = input("性别:")
data[3] = input("管理仓库:")
if data[3].isdigit():
data[3] = "仓库"+data[3]
sql = '''INSERT INTO storeman(Mno,Mname,Msex,Mhouse) VALUES (%d,"%s","%s","%s");'''%(data[0],data[1],data[2],data[3])
try:
cursor.execute(sql)
db.commit()
print("\n增加成功")
except:
unwork()
elif a == '2':
select_sh()
print("\n请输入以下需要增加的内容")
data = ['']*3
# 仓库名为主键,不能重复
data[0] = input("仓库名(不能重复):")
if data[0].isdigit():
data[0] = "仓库"+data[0]
data[1] = input("管理员:")
data[2] = input("储存商品:")
sql = '''INSERT INTO storehouse(Hname,Hman,Hgoods) VALUES ("%s","%s","%s");'''%(data[0],data[1],data[2])
try:
cursor.execute(sql)
db.commit()
print("\n增加成功")
except:
unwork()
elif a == '3':
select_g()
print("\n请输入以下需要增加的内容")
data = ['']*3
data[0] = input("商品名(不能重复):")
data[1] = float(input("价格:"))
data[2] = input("储存位置:")
if data[2].isdigit():
data[2] = "仓库"+data[2]
sql = '''INSERT INTO goods(Gname,Gprice,Ghouse) VALUES ("%s",%.2f,"%s");'''%(data[0],data[1],data[2])
try:
cursor.execute(sql)
db.commit()
print("\n增加成功")
except:
unwork()
else:
print("\n非法指令,请重新输入")
# 更改
elif a == '3':
a = input("\n指定更改内容所在的表格位置:\n1.保管员表\n2.仓库表\n3.商品表\n请输入指令编号:")
if a == '1':
select_sm()
Mno = int(input("\n请输入需要更改内容的工号:"))
cursor.execute('''SELECT * FROM storeman
WHERE Mno=%d'''%Mno)
data0 = cursor.fetchall()
if data0 != ():
print("\n请输入修改后的内容")
data = ['']*4
data[0] = int(input("工号(不能重复):"))
data[1] = input("姓名:")
data[2] = input("性别:")
data[3] = input("管理仓库:")
if data[3].isdigit():
data[3] = "仓库"+data[3]
sql = '''UPDATE storeman
SET Mno=%d,Mname="%s",Msex="%s",Mhouse="%s"
WHERE Mno=%d'''%(data[0],data[1],data[2],data[3],Mno)
try:
cursor.execute(sql)
db.commit()
print("\n更改成功")
except:
unwork()
else:
print("\n该工号不存在")
elif a == '2':
select_sh()
Hname = input("\n请输入需要更改内容的仓库名:")
if Hname.isdigit():
Hname = "仓库"+Hname
cursor.execute('''SELECT * FROM storehouse
WHERE Hname="%s"'''%Hname)
data0 = cursor.fetchall()
if data0 != ():
print("\n请输入修改后的内容")
data = ['']*3
data[0] = input("仓库名(不能重复):")
if data[0].isdigit():
data[0] = "仓库"+data[0]
data[1] = input("管理员:")
data[2] = input("储存商品:")
sql = '''UPDATE storehouse
SET Hname="%s",Hman="%s",Hgoods="%s"
WHERE Hname="%s"'''%(data[0],data[1],data[2],Hname)
try:
cursor.execute(sql)
db.commit()
print("\n更改成功")
except:
unwork()
else:
print("\n该仓库不存在")
elif a == '3':
select_g()
Gname = input("\n请输入需要更改内容的商品名:")
cursor.execute('''SELECT * FROM goods
WHERE Gname="%s"'''%Gname)
data0 = cursor.fetchall()
if data0 != ():
print("\n请输入修改后的内容")
data = ['']*3
data[0] = input("商品名(不能重复):")
data[1] = float(input("价格:"))
data[2] = input("储存位置:")
if data[2].isdigit():
data[2] = "仓库"+data[2]
sql = '''UPDATE goods
SET Gname="%s",Gprice=%f,Ghouse="%s"
WHERE Gname="%s"'''%(data[0],data[1],data[2],Gname)
try:
cursor.execute(sql)
db.commit()
print("\n更改成功")
except:
unwork()
else:
print("\n该商品不存在")
else:
print("\n非法指令,请重新输入")
# 删除
elif a == '4':
a = input("\n指定删除内容所在的表格位置:\n1.保管员表\n2.仓库表\n3.商品表\n请输入指令编号:")
if a == '1':
select_sm()
data = int(input("\n请输入需要删除的工号:"))
cursor.execute('''SELECT * FROM storeman
WHERE Mno=%d'''%data)
data0 = cursor.fetchall()
if data0 != ():
sql = '''DELETE FROM storeman
WHERE Mno=%d'''%data
a = input("\n再次确认,是否删除?(y/n)")
if a == 'Y' or a == 'y':
try:
cursor.execute(sql)
db.commit()
print("\n删除成功")
except:
unwork()
else:
print("\n该工号不存在")
elif a == '2':
select_sh()
data = input("\n请输入需要删除的仓库名或编号:")
if data.isdigit():
data = "仓库"+data
cursor.execute('''SELECT * FROM storehouse
WHERE Hname="%s"'''%data)
data0 = cursor.fetchall()
if data0 != ():
sql = '''DELETE FROM storehouse
WHERE Hname="%s"'''%data
a = input("\n再次确认,是否删除?(y/n)")
if a == 'Y' or a == 'y':
try:
cursor.execute(sql)
db.commit()
print("\n删除成功")
except:
unwork()
else:
print("\n该仓库不存在")
elif a == '3':
select_g()
data = input("\n请输入需要删除的商品名:")
cursor.execute('''SELECT * FROM goods
WHERE Gname="%s"'''%data)
data0 = cursor.fetchall()
if data0 != ():
sql = '''DELETE FROM goods
WHERE Gname="%s"'''%data # %s两端不加""无法执行
a = input("\n再次确认,是否删除?(y/n)")
if a == 'Y' or a == 'y':
try:
cursor.execute(sql)
db.commit()
print("\n删除成功")
except:
unwork()
else:
print("\n该商品不存在")
else:
print("\n非法指令,请重新输入")
# 退出
elif a == '5':
a = input("\n再次确认,是否退出程序?(y/n)")
if a == 'Y' or a == 'y':
break
# 重新创建数据库
elif a == '6':
a = input("\n再次确认,是否重新创建数据库?(y/n)")
if a == 'Y' or a == 'y':
sql = open('create.sql','r',encoding='utf-8')
create_sql = sql.read()
create_sql = create_sql[0:-2].split(';')
sql.close()
try:
print()
work(create_sql)
except:
unwork()
# 其他字符处理
else:
print("\n非法指令,请重新输入")
# 再次退出
if a == 'Y' or a == 'y':
break
except:
a = input("数据库不存在,是否创建?(y/n)")
if a == 'Y' or a == 'y':
sql = open('create.sql','r',encoding='utf-8')
create_sql = sql.read()
# 末尾为另起空行,列表到最后 ; 前截止(-2)
# 以 ; 为分界分割成列表,execute()每次只能执行一个sql语句
create_sql = create_sql[0:-2].split(';')
sql.close()
try:
print()
work(create_sql)
except:
unwork()
a = input("\n是否退出程序?(y/n)")
if a == 'Y' or a == 'y':
break
# 关闭数据库连接
cursor.close()
db.close()
print("\n已关闭mysql连接\n退出完成")