Python连接SQL server数据库,创建买卖商品购物系统,并完成创建用户名,设置权限和功能测试等操作

设计实现管理数据库应用程序,要求应具有如下基本功能:

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()
             
                

自己感觉写的还算可以使用,要求的功能实现了,但是代码不够友好,容错性低,欢迎使用,哪里不懂可以私信我。

测试效果如下

 

 

 第一次写,不知道清不清楚,有问题可以私信问我,谢谢观看!

  • 3
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
下面是使用Python连接SQL Server数据库的步骤: 1. 安装pyodbc模块 在Python连接SQL Server需要使用模块pyodbc,因此需要先安装该模块,使用命令`pip install pyodbc`。 2. 导入pyodbc模块 安装完成后,在Python中导入pyodbc模块,使用`import pyodbc`。 3. 连接SQL Server数据库 使用pyodbc的`connect`方法连接SQL Server数据库。需要提供数据库连接字符串,格式为: ``` DRIVER={SQL Server};SERVER=server_name;DATABASE=database_name;UID=username;PWD=password ``` 其中,server_name、database_name、username、password需要根据实际情况进行替换。 示例代码: ```python import pyodbc # 连接数据库 conn_str = 'DRIVER={SQL Server};SERVER=localhost;DATABASE=testdb;UID=sa;PWD=password' conn = pyodbc.connect(conn_str) # 创建游标对象 cursor = conn.cursor() # 查询数据 cursor.execute('SELECT * FROM user') # 打印查询结果 for row in cursor: print(row) # 关闭游标和数据库连接 cursor.close() conn.close() ``` 以上代码连接了本地服务器上的testdb数据库,并查询了其中一个user的表的所有数据。每一行数据是一个元组,其中包含各个字段的值。 注意事项: - 在连接字符串中,需要将数据库、用户、密码等敏感信息替换成实际的内容; - 如果SQL Server数据库使用了Windows身份验证,可以省略`UID`和`PWD`两个参数,将其设置为空字符串,然后在连接字符串中添加`Trusted_Connection=yes`。 参考文档: - [pyodbc](https://github.com/mkleehammer/pyodbc/wiki)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有点饱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值