设计实现管理数据库应用程序,要求应具有如下基本功能:
1 使用Python编写应用程序
2 设置至少3个用户:分别为管理员sa,U1(卖家),和自己(买家).(以自己的学号作为登陆名和用户名)
3 管理员可以管理操纵所有数据。
(1) 可对表中数据根据用户号进行查询,并可增加、删除、更改用户记录。当更改用户表中用户号时可以实现其他相关表中用户号的级联更新,删除用户表中用户记录时可以实现相关表中记录级联删除。
(2)对商品表中数据,可依根据商品号进行查询,并可增加、删除、更改商品记录。
(3)其他表要具有查询,并可增加、删除、
4 u1只能查看更新商品信息,和查看更新某一类商品订单记录。
5 自己只能查看自己所有个人信息和订单信息。
以上是要求;
以下是代码段,这是Python连接数据库并创建用户,创建表,填表,设置用户权限。
import pymssql #引入pymssql模块
conn= pymssql.connect('(local)', 'sa', '12345', 'deal11') #服务器名,账户,密码,数据库名
cursor=conn.cursor()
if cursor:
print("连接成功!")
# 设置登录名和数据库用户sa
cursor.execute("create user sa for login u11")
# 设置登录名和数据库用户u1
cursor.execute("create user u1 for login u1")
# 设置登录名和数据库用户l1908524093
cursor.execute("create user l1908524093 for login l1908524093")
def CreateTable():
#创建用户表-yonghu
sql1="""
create table yonghu(
User_id VARCHAR(50) primary key,
User_name VARCHAR(50) NOT NULL,
User_tel bigint NOT NULL,
User_add VARCHAR(50) NOT NULL)"""
cursor.execute(sql1)
#创建商品表-shangpin
sql2="""
IF OBJECT_ID('shangin','U') IS NOT NULL
DROP TABLE shangpin
create table shangpin(
Sp_id VARCHAR(50) primary key,
Sp_name VARCHAR(50) NOT NULL,
Sp_price int NOT NULL,
Sp_kind VARCHAR(50) NOT NULL)"""
cursor.execute(sql2)
#创建订单表-dingdan
sql3="""
IF OBJECT_ID('dingdan','U') IS NOT NULL
DROP TABLE dingdan
create table dingdan(
Dd_id VARCHAR(50) primary key,
Sp_id VARCHAR(50) NOT NULL,
User_id VARCHAR(50) NOT NULL,
Dd_price int NOT NULL,
foreign key(User_id) references yonghu(User_id))"""
cursor.execute(sql3)
conn.commit()
CreateTable()
def InsertData():
#向用户表插入数据
sql1="insert into yonghu(User_id,User_name,User_tel,User_add) values(%s,%s,%d,%s)"
data1=[('l1908524093','lideyu','1318309','Xinxiang'),
('001','Mark','13512341234','Zhengzhou'),
('002','Kangkang','13503714321','Beijing')]
cursor.executemany(sql1,data1)
#向商品表插入数据
sql2="insert into shangpin(Sp_id,Sp_name,Sp_price,Sp_kind) values(%s,%s,%d,%s)"
data2=[('s001','toothbrush','10','baihuo'),
('s002','pen','15','wenju'),
('s003','eraser','2','wenju'),
('s004','biscuits','6','snacks'),
('s005','chips','5','snacks')]
cursor.executemany(sql2,data2)
#向订单表插入数据
sql3="insert into dingdan(Dd_id,Sp_id,User_id,Dd_price) values(%s,%s,%s,%d)"
data3=[('202106012001','s001','001','20'),
('202012132002','s002','l1908524093','45'),
('202106122003','s003','l1908524093','60')]
cursor.executemany(sql3,data3)
conn.commit()
InsertData()
#对用户表和订单表设置用户号级联更新和删除
cursor.execute("""alter table dingdan add constraint FK_dingdan_yonghu
foreign key(User_id) references yonghu(User_id)
on update cascade on delete cascade""")
conn.commit()
#把商品表的查询、增加、删除和更改授权给sa(建立表时已设置商品号为主键)
cursor.execute("""
grant select,delete,insert,update
on shangpin
to "sa"
""")
#把订单表的查询、增加、删除和更改授权给sa(建立表时已设置订单号为主键)
cursor.execute("""
grant select,delete,insert,update
on dingdan
to "sa"
""")
#把用户表的查询增加删除授权给sa(建立表时已设置用户号为主键)
cursor.execute("""
grant select,delete,insert
on yonghu
to "sa"
""")
#把商品表的查询,更新,增加,删除授权给u1
cursor.execute("""
grant update,select,delete,insert
on shangpin
to "u1"
""")
#建立文具类商品订单视图,把查看,更新权限授权u1
cursor.execute("""
create view dingdan_wj
as
select *
from dingdan
where Sp_id in (select Sp_id
from shangpin
where Sp_kind='wenju')
""")
cursor.execute("""
grant update,select
on dingdan_wj
to "u1"
""")
#把商品表的查询授权给个人
cursor.execute("""
grant select
on shangpin
to "l1908524093"
""")
#把订单表的增加授权给个人,用于购物
cursor.execute("""
grant insert
on dingdan
to "l1908524093"
""")
#创建个人信息视图,个人订单信息视图,授权个人
cursor.execute("""
create view l1908524093_User
as
select*
from yonghu
where User_id='l1908524093'
""")
#创建个人订单信息视图
cursor.execute("""
create view l1908524093_Dd
as
select*
from dingdan
where User_id='l1908524093'
""")
#授权个人信息视图查看权限给个人
cursor.execute("""
grant select
on l1908524093_User
to "l1908524093"
""")
#授权个人订单视图查看权限给个人
cursor.execute("""
grant select
on l1908524093_Dd
to "l1908524093"
""")
conn.commit()
conn.close()
插入后数据库刷新一下即可看到效果
测试效果如下:创建的用户
创建的表
以下是购物的代码,三个用户共用的,管理员,卖家,买家。通过判断·账户来判断用户身份,然后给不同的功能。登录后的功能菜单栏,我用的函数嵌套来实现的。
import pymssql #引入pymssql模块
import datetime
user=input("请输入您的登录名")
password=input("请输入您的密码")
conn=pymssql.connect('(local)', user, password, 'deal')
cursor=conn.cursor()
def yonghu_sel1():
a11=input("请输入您要查询的用户号")
cursor.execute("select * from yonghu where User_id="+"'"+a11+"'")
results=cursor.fetchall()
for row in results:
print("用户号:"+row[0]+" 用户名:"+row[1]+" 电话:"+str(row[2])+" 地址:"+row[3])
conn.commit()
def yonghu_add1():
a12=input("请输入您要增加的用户信息(示例:'005','DuFu','1318309','Shanghai')")
results=cursor.execute("insert into yonghu values"+a12)
conn.commit()
print(a12+"添加成功")
def yonghu_del1():
a13=input("请输入您要删除用户的用户号")
cursor.execute("delete from yonghu where User_id="+"'"+a13+"'")
conn.commit()
print(a13+"删除成功")
def yonghu_up1():
a141=input("请输入您要更新信息用户的用户号")
a142=input("更改用户的哪一项信息——1、用户号 2、名字 3、电话 4、地址")
if a142=='1':
a1421=input("用户号更改为?")
cursor.execute("update yonghu set User_id="+"'"+a1421+"'"+"where User_id="+"'"+a141+"'" )
conn.commit()
print("更改成功")
if a142=='2':
a1422=input("名字更改为?")
cursor.execute("update yonghu set User_name="+"'"+a1422+"'"+" where User_id="+"'"+a141+"'" )
conn.commit()
print("更改成功")
if a142=='3':
a1423=input("电话更改为?")
cursor.execute("update yonghu set User_tel="+"'"+a1423+"'"+"where User_id="+"'"+a141+"'" )
conn.commit()
print("更改成功")
if a142=='4':
a1424=input("地址更改为?")
cursor.execute("update yonghu set User_add="+"'"+a1424+"'"+"where User_id="+"'"+a141+"'" )
conn.commit()
print("更改成功")
def shangpin_sel1():
a11=input("请输入您要查询的商品号")
cursor.execute("select * from shangpin where Sp_id="+"'"+a11+"'")
results=cursor.fetchall()
for row in results:
print("商品号:"+row[0]+" 商品名:"+row[1]+" 价格:"+str(row[2])+" 种类:"+row[3])
conn.commit()
def shangpin_add1():
a12=input("请输入您要增加的商品信息(示例:'s010','pants','100','clothing'")
results=cursor.execute("insert into shangpin values"+a12)
conn.commit()
print(a12+"添加成功")
def shanagpin_del1():
a13=input("请输入您要删除商品的商品号")
cursor.execute("delete from shangpin where Sp_id="+"'"+a13+"'")
conn.commit()
print(a13+"删除成功")
def shangpin_up1():
a141=input("请输入您要更新信息商品的商品号")
a142=input("更改商品的哪一项信息——1、商品号 2、名字 3、价格 4、种类")
if a142=='1':
a1421=input("商品号更改为?")
cursor.execute("update shangpin set Sp_id="+"'"+a1421+"'"+"where Sp_id="+"'"+a141+"'" )
conn.commit()
cursor.execute("select * from shangpin where Sp_id="+"'"+a1421+"'")
results=cursor.fetchall()
for row in results:
print("商品号:"+row[0]+" 商品名:"+row[1]+" 价格:"+str(row[2])+" 种类:"+row[3])
print("更改成功")
if a142=='2':
a1422=input("名字更改为?")
cursor.execute("update shangpin set Sp_name="+"'"+a1422+"'"+"where Sp_id="+"'"+a141+"'" )
conn.commit()
cursor.execute("select * from shangpin where Sp_id="+"'"+a141+"'")
results=cursor.fetchall()
for row in results:
print("商品号:"+row[0]+" 商品名:"+row[1]+" 价格:"+str(row[2])+" 种类:"+row[3])
print("更改成功")
print("更改成功")
if a142=='3':
a1423=input("价格更改为?")
cursor.execute("update shangpin set Sp_price="+"'"+a1423+"'"+"where Sp_id="+"'"+a141+"'" )
conn.commit()
cursor.execute("select * from shangpin where Sp_id="+"'"+a141+"'")
results=cursor.fetchall()
for row in results:
print("商品号:"+row[0]+" 商品名:"+row[1]+" 价格:"+str(row[2])+" 种类:"+row[3])
print("更改成功")
print("更改成功")
if a142=='4':
a1424=input("种类更改为?")
cursor.execute("update shangpin set Sp_kind="+"'"+a1424+"'"+"where Sp_id="+"'"+a141+"'" )
conn.commit()
cursor.execute("select * from shangpin where Sp_id="+"'"+a141+"'")
results=cursor.fetchall()
for row in results:
print("商品号:"+row[0]+" 商品名:"+row[1]+" 价格:"+str(row[2])+" 种类:"+row[3])
print("更改成功")
def dingdan_sel1():
a11=input("请输入您要查询的订单号")
cursor.execute("select * from dingdan where Dd_id="+"'"+a11+"'")
results=cursor.fetchall()
for row in results:
print("订单号:"+row[0]+" 商品和:"+row[1]+" 用户号:"+row[2]+" 价格:"+str(row[3]))
conn.commit()
def dingdan_add1():
a12=input("请输入您要增加的订单信息(示例:('202012132002','s004','001','100')")
results=cursor.execute("insert into dingdan values"+a12)
conn.commit()
print(a12+"添加成功")
def dingdan_del1():
a13=input("请输入您要删除用户的订单号")
cursor.execute("delete from dingdan where Dd_id="+"'"+a13+"'")
conn.commit()
print(a13+"删除成功")
def shangpin_sel2():
a1=input("请输入您要查询的商品号")
cursor.execute("select * from shangpin where Sp_id="+"'"+a1+"'")
results=cursor.fetchall()
for row in results:
print("商品号:"+row[0]+" 商品名:"+row[1]+" 价格:"+str(row[2])+" 种类:"+row[3])
conn.commit()
def shangpin_up2():
a141=input("请输入您要更新信息商品的商品号")
a142=input("更改商品的哪一项信息——1、商品号 2、名字 3、价格 4、种类")
if a142=='1':
a1421=input("商品号更改为?")
cursor.execute("update shangpin set Sp_id="+"'"+a1421+"'"+"where Sp_id="+"'"+a141+"'" )
conn.commit()
cursor.execute("select * from shangpin where Sp_id="+"'"+a1421+"'")
results=cursor.fetchall()
for row in results:
print("商品号:"+row[0]+" 商品名:"+row[1]+" 价格:"+str(row[2])+" 种类:"+row[3])
print("更改成功")
if a142=='2':
a1422=input("名字更改为?")
cursor.execute("update shangpin set Sp_name="+"'"+a1422+"'"+"where Sp_id="+"'"+a141+"'" )
conn.commit()
cursor.execute("select * from shangpin where Sp_id="+"'"+a141+"'")
results=cursor.fetchall()
for row in results:
print("商品号:"+row[0]+" 商品名:"+row[1]+" 价格:"+str(row[2])+" 种类:"+row[3])
print("更改成功")
if a142=='3':
a1423=input("价格更改为?")
cursor.execute("update shangpin set Sp_price="+"'"+a1423+"'"+"where Sp_id="+"'"+a141+"'" )
conn.commit()
cursor.execute("select * from shangpin where Sp_id="+"'"+a141+"'")
results=cursor.fetchall()
for row in results:
print("商品号:"+row[0]+" 商品名:"+row[1]+" 价格:"+str(row[2])+" 种类:"+row[3])
print("更改成功")
if a142=='4':
a1424=input("种类更改为?")
cursor.execute("update shangpin set Sp_kind="+"'"+a1424+"'"+"where Sp_id="+"'"+a141+"'" )
conn.commit()
cursor.execute("select * from shangpin where Sp_id="+"'"+a141+"'")
results=cursor.fetchall()
for row in results:
print("商品号:"+row[0]+" 商品名:"+row[1]+" 价格:"+str(row[2])+" 种类:"+row[3])
print("更改成功")
def shangpin_add2():
a12=input("请输入您要增加的商品信息(示例:'s010','pants','100','clothing')")
results=cursor.execute("insert into shangpin values"+a12)
conn.commit()
print(a12+"添加成功")
def shanagpin_del2():
a13=input("请输入您要删除商品的商品号")
cursor.execute("delete from shangpin where Sp_id="+"'"+a13+"'")
conn.commit()
print(a13+"删除成功")
def dingdan_sel2():
print("文具类商品全部订单如下")
cursor.execute("select * from dingdan_wj")
results=cursor.fetchall()
for row in results:
print(row[0],row[1],row[2],row[3])
conn.commit()
def dingdan_up2():
print("文具类商品全部订单如下")
cursor.execute("select * from dingdan_wj")
results=cursor.fetchall()
for row in results:
print(row[0],row[1],row[2],row[3])
conn.commit()
a1=input("请输入您要更新订单记录的订单号")
a11=input("订单号更改为?")
a12=input("购买用户号更改为?")
a13=input("购买商品号更改为?")
a14=input("订单总金额改为?")
cursor.execute("update dingdan_wj set Dd_id="+"'"+a11+"'"+",Sp_id="+"'"+a12+"'"+",User_id="+"'"+a13+"'"+",Dd_price="+"'"+a14+"'"+"where Dd_id="+"'"+a1+"'" )
conn.commit()
print("更改成功")
def yonghu_sel3():
cursor.execute("select * from l1908524093_User")
results=cursor.fetchall()
for row in results:
print("用户号:"+row[0]+" 用户名:"+row[1]+" 电话:"+str(row[2])+" 地址:"+row[3])
conn.commit()
def dingdan_sel3():
cursor.execute("select * from l1908524093_Dd")
results=cursor.fetchall()
for row in results:
print("订单号:"+row[0]+" 商品号:"+row[1]+" 用户号:"+row[2]+" 价格:"+str(row[3]))
conn.commit()
def buy():
cursor.execute("select * from shangpin")
results=cursor.fetchall()
for row in results:
print("商品号:"+row[0]+" 商品名:"+row[1]+" 价格:"+str(row[2])+" 种类:"+row[3])
a1=input("请输入您选择的商品号")
b=input("请输入您要购买个个数")
cursor.execute("select Sp_price from shangpin where Sp_id="+"'"+a1+"'")
results=cursor.fetchall()
c=int(b)*results[0][0]
now_time1=datetime.datetime.now()
now_time=datetime.datetime.strftime(now_time1,"%Y%m%d%H%M%S")
d="('"+now_time+"','"+a1+"','"+"l1908524093"+"','"+str(c)+"')"
cursor.execute("insert into dingdan(Dd_id,Sp_id,User_id,Dd_price) values"+d)
print("购买成功"+d)
def sa():
a=input("请选择您要操作的表:1、用户信息 2、商品信息 3、订单信息 4、退出\n")
if a=='1':
a1=input("您选择了用户信息表。请选择您要的操作:1、查询 2、增加 3、删除 4、更改 5、返回上层\n")
if a1=='1':
yonghu_sel1()
sa()
if a1=='2':
yonghu_add1()
sa()
if a1=='3':
yonghu_del1()
sa()
if a1=='4':
yonghu_up1()
sa()
if a1=='5':
sa()
else:
print("输入错误,请重新选择")
sa()
if a=='2':
a1=input("您选择了商品信息表。请选择您要的操作:1、查询 2、增加 3、删除 4、更改 5、返回上层\n")
if a1=='1':
shangpin_sel1()
sa()
if a1=='2':
shangpin_add1()
sa()
if a1=='3':
shangpin_del1()
sa()
if a1=='4':
shangpin_up1()
sa()
if a1=='5':
sa()
else:
print("输入错误,请重新选择")
sa()
if a=='3':
a1=input("您选择了订单信息表。请选择您要的操作:1、查询 2、增加 3、删除 4、返回上层\n")
if a1=='1':
dingdan_sel1()
sa()
if a1=='2':
dingdan_add1()
sa()
if a1=='3':
dingdan_del1()
sa()
if a1=='4':
sa()
else:
print("输入错误,请重新选择")
sa()
if a=='4':
exit()
else:
print("输入错误,请重新选择")
sa()
def u1():
a=input("请选择操作——1、查看商品 2、更新商品 3、增加商品 4、删除商品 5、查看所卖商品订单 6、更新所卖商品订单 7、退出\n")
if a=='1':
shangpin_sel2()
u1()
if a=='2':
shangpin_up2()
u1()
if a=='3':
shangpin_add2()
u1()
if a=='4':
shangpin_del2()
u1()
if a=='5':
dingdan_sel2()
u1()
if a=='6':
dingdan_up2()
u1()
if a=='7':
exit()
else:
print("输入错误,请重新选择")
u1()
def l1():
a=input("请选择您要进行的操作——1、查看自己所有个人信息2、查看自己所有订单信息 3、购物 4、退出\n")
if a=='1':
yonghu_sel3()
l1()
if a=='2':
dingdan_sel3()
l1()
if a=='3':
buy()
l1()
if a=='4':
exit()
else:
print("输入错误,请重新选择")
l1()
if cursor:
print(user+"登录成功!")
if user=='sa':
print("""您的身份是管理员。管理员可以管理操纵所有数据。
(1)可对表中数据根据用户号进行查询,并可增加、删除、更改用户记录。
当更改用户表中用户号时可以实现其他相关表中用户号的级联更新,
删除用户表中用户记录时可以实现相关表中记录级联删除。
(2)对商品表中数据,可依根据商品号进行查询,并可增加、删除、更改商品记录。
(3)其他表要具有查询,并可增加、删除、 """)
sa()
if user=='u1':
print("""您的身份是卖家。卖家可以查看,增加,删除,更新自己所卖类的商品信息,和查看更新自己所卖商品订单记录。""")
u1()
if user=='l1908524093':
print("您的身份是买家。可以查看自己所有个人信息和订单信息,可以购物")
l1()
conn.commit()
conn.close()
自己感觉写的还算可以使用,要求的功能实现了,但是代码不够友好,容错性低,欢迎使用,哪里不懂可以私信我。
测试效果如下
第一次写,不知道清不清楚,有问题可以私信问我,谢谢观看!