Python+MySQL实现基本内容管理

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退出完成")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值