Mysql项目 #电商数据库生成 #电商程序 #用户注册下单 #可直接运行

一、确定需要的功能

在这里插入代码片

二、生成一个电商数据库

  • cmd中:create database shop;
  • python中,直接复制黏贴,然后阅读代码及注释。不懂在评论区问我哈,有什么好的建议可以提出来。也欢迎指教,我也觉得自己写代码有点繁琐o(╥﹏╥)o。

from pymysql import connect
#连接与游标
conn = connect(user = '名',password = '密',host = 'localhost',port = 3306,database = 'shop',use_unicode = True)
c = conn.cursor()

# 创建六张表的sql语句(商品表,商品分类表,商品品牌表,订单表,顾客表,订单详情表)
sql_goods = '''create table goods(
    id int unsigned primary key auto_increment not null,
    name varchar(150) not null,
    cate_id int not null,
    brand_id int not null,
    price int not null default 0,
    is_show bit not null default 1,
    is_saleoff bit not null default 0
);'''

sql_cates = '''create table cates(
    id int unsigned not null auto_increment primary key,
    name varchar(15));'''

sql_brands = '''create table brands(
    id int unsigned not null auto_increment primary key,
    name varchar(15));'''

sql_orders = '''create table orders(
    id int unsigned not null auto_increment primary key,
    order_date_time varchar(10),
    customers_id int);'''

sql_customers = '''create table customers(
    id int unsigned not null auto_increment primary key,
    name varchar(15),
    address varchar(15),
    tel varchar(15),
    password varchar(15)
    );'''

sql_order_details = '''create table order_details(
    id int unsigned not null auto_increment primary key,
    order_id int,
    good_id int,
    quantity int);'''

# 执行插入语句
for i in [sql_goods,sql_cates,sql_brands,sql_orders,sql_customers,sql_order_details]:
    c.execute(i)


#往表里插入数据的sql语句
sql_value_goods = '''insert into goods values
(0,‘r510vc 15.6英寸1’,‘1’,‘1’,‘3399’,default,default),
(0,‘x550cc 15.6英寸1’,‘1’,‘1’,‘2799’,default,default),
(0,‘x240 2’,‘2’,‘2’,‘4880’,default,default),
(0,‘u330p 13.3英寸3’,‘2’,‘2’,‘4299’,default,default),
(0,‘svp13226scb 触控3’,‘3’,‘3’,‘7999’,default,default),
(0,‘ipad mini 7.9英寸4’,‘4’,‘4’,‘1999’,default,default),
(0,‘iPad air 9.7英寸4’,‘4’,‘4’,‘3388’,default,default),
(0,‘iPad mini 配置 retine 显示屏’,‘4’,‘4’,‘2788’,default,default),
(0,‘ideacentre c3340 20英寸一体电脑’,‘5’,‘2’,‘3499’,default,default),
(0,‘vostro 3800-r1206 台式电脑’,‘5’,‘5’,‘2899’,default,default),
(0,‘15.6 寸电脑屏保护膜’,‘6’,‘6’,‘29’,default,default),
(0,‘优雅 复古 无线鼠标键盘’,‘6’,‘7’,‘299’,default,default),
(0,‘15寸 4K 液晶显示屏’,‘6’,‘3’,‘1899’,default,default),
(0,‘限量款 LOL 鼠标垫’,‘6’,‘8’,‘29’,default,default);
'''

sql_value_cates = '''insert into cates(name) values
(笔记本),(超极本),(超级本),(平板电脑),(台式机),(电脑配件);
'''

sql_value_brands = '''insert into brands(name) values
(华硕),(联想),(索尼),(苹果),(戴尔),(爱戴尔),(雷蛇),(唯爱);
'''
sql_value_orders = '''insert into orders(order_date_time,customers_id) values
('2019-10-10',601);
'''

sql_value_customers = '''insert into customers(name,address,tel,password) values
('八海','上海八海小区','123xxxx789','123456');
'''

sql_value_order_details = '''insert into order_details(order_id,good_id,quantity) values
(1,800,4);
'''

#执行插入语句
for i in [sql_value_goods,sql_value_cates,sql_value_brands,sql_value_orders,sql_value_customers,sql_value_order_details]:
    c.execute(i)
conn.commit()


c.close()
conn.close()'''

sql_order_details = '''create table order_details(
    id int unsigned not null auto_increment primary key,
    order_id int,
    good_id int,
    quantity int);'''

# 执行插入语句:挑你需要的放到下面的空列表里
for i in [sql_goods,sql_cates,sql_brands,sql_orders,sql_customers,sql_order_details]:
    c.execute(i)


#往表里插入数据的sql语句
sql_value_goods = '''insert into goods values
(0,‘r510vc 15.6英寸1,1,1,3399,default,default),
(0,‘x550cc 15.6英寸1,1,1,2799,default,default),
(0,‘x240 2,2,2,4880,default,default),
(0,‘u330p 13.3英寸3,2,2,4299,default,default),
(0,‘svp13226scb 触控3,3,3,7999,default,default),
(0,‘ipad mini 7.9英寸4,4,4,1999,default,default),
(0,‘iPad air 9.7英寸4,4,4,3388,default,default),
(0,‘iPad mini 配置 retine 显示屏’,4,4,2788,default,default),
(0,‘ideacentre c3340 20英寸一体电脑’,5,2,3499,default,default),
(0,‘vostro 3800-r1206 台式电脑’,5,5,2899,default,default),
(0,15.6 寸电脑屏保护膜’,6,6,29,default,default),
(0,‘优雅 复古 无线鼠标键盘’,6,7,299,default,default),
(0,15寸 4K 液晶显示屏’,6,3,1899,default,default),
(0,‘限量款 LOL 鼠标垫’,6,8,29,default,default);
'''

sql_value_cates = '''insert into cates() values
(笔记本),(超极本),(超级本),(平板电脑),(台式机),(电脑配件);
'''

sql_value_brands = '''insert into brands() values
(华硕),(联想),(索尼),(苹果),(戴尔),(爱戴尔),(雷蛇),(唯爱);
'''
sql_value_orders = '''insert into orders(order_date_time,customers_id) values
('2019-10-10',601);
'''

sql_value_customers = '''insert into customers(name,address,tel,password) values
('八海','上海八海小区','123xxxx789','123456');
'''

sql_value_order_details = '''insert into order_details(order_id,good_id,quantity) values
(1,800,4);
'''

#执行插入语句
for i in [sql_value_goods,sql_value_cates,sql_value_brands,sql_value_orders,sql_value_customers,sql_value_order_details]:
    c.execute(i)
conn.commit()


c.close()
conn.close()

三、电商小程序代码实现

下列一切操作,都依据上面的数据库改变而成

  1. 先把刚才随便添加的数据删了

cmd中:
delete from orders where customers_id=601;
delete from customers where name=‘八海’;
delete from order_details where quantity=4;

  1. 新建一个py文件,写入以下代码:
from pymysql import connect
import time

class Shop:
    def __init__(self):
        self.conn = connect(user = '名',password = '密',host = 'localhost',port = 3306,database = 'shop',use_unicode = True)
        self.c = self.conn.cursor()
        self.load_or_login()
        self.show_menu()
        self.show_orders()
    
    def __del__(self):
        self.c.close()
        self.conn.close()
    
    #注册和登录,都获取用户ID
    def load_or_login(self):
        lol = input('请问您是要登录还是注册?登录:1;注册:2')
        if lol == '1':
            self.check_load()
        elif lol == '2':
            self.login()
        else:
            print('您的输入有误,请重新输入')
            self.load_or_login()

    #登陆
    def check_load(self):
        load_user = input('请输入用户名')
        load_passwd = input('请输入密码')
        user_passwd = self.c.execute(f'''select * from customers where name='{load_user}' and password='{load_passwd}';''')#提交查询
        check_user = self.c.fetchone()
        if check_user:#利用了如果是空元组会为空值,从而跳转到else
            self.cstm_id = check_user[0]
        else:
            print('请重新输入或注册')
            self.load_or_login()#使用函数,回到注册or登陆的选择页面

    #注册
    def login(self):
        user_l = input('请输入用户名,不超过15字符')
        passwd_l0 = input('请输入密码,不超过15字符')
        passwd_l1 = input('请再次输入密码')
        if passwd_l0 == passwd_l1:
            address = input('请输入地址')
            Tel = input('请输入电话')
            #提交用户数据。确认提交
            self.c.execute(f'''insert into customers(name,address,tel,password) values('{user_l}','{address}','{Tel}','{passwd_l0}');''')
            self.conn.commit()
            self.c.execute(f'''select id from customers where name='{user_l}' and password='{passwd_l0}';''')
            self.cstm_id = self.c.fetchone()[0]
        else:
            print('密码不一致')
            self.login()#使用递归
    
    #展示商品
    def show_menu(self):
        print('——————————————————————商场有以下商品——————————————————————')
        sql_goods_menu = '''select goods.id as '产品ID',cates.name as '商品分类',goods.name as '商品名',brands.name as '品牌',goods.price as '价格' from  goods left join cates on goods.cate_id=cates.id left join brands on goods.brand_id=brands.id;'''
        self.c.execute(sql_goods_menu)
        for show_m in self.c.fetchall():
            print(show_m)
        print('————————————————————————展示完毕————————————————————————')
        self.user_order()

    #下单,获取商品ID,数量时间
    def user_order(self):
        self.choice_id = int(input('请输入商品ID,输入666退出程序'))#这里输入ID,如果用户输入666就退出程序
        if self.choice_id == 666:
            print('订单已取消')
            return #使用return退出函数
        elif self.choice_id in range(1,15):
            self.choice_qlt = input('请问需要多少数量')
            self.choice_time = time.strftime('%Y-%m-%d',time.localtime(time.time()))#获取当前时间戳
            self.input_order()

    #订单写入数据表
    def input_order(self):
        sql_choice_orders = f'''insert into orders(order_date_time,customers_id) values('{self.choice_time}','{self.cstm_id}');'''
        self.c.execute(sql_choice_orders)#提交订单表
        self.conn.commit()#确认订单表
        self.c.execute(f'''select id from orders where order_date_time='{self.choice_time}' and customers_id={self.cstm_id}''')#查找订单表该订单ID
        self.order_id_choice = self.c.fetchall()[-1][0]#获取该用户最后一个订单
        sql_value_order_details = f'''insert into order_details(order_id,good_id,quantity) values({self.order_id_choice},{self.choice_id},{self.choice_qlt});'''
        self.c.execute(sql_value_order_details)
        self.conn.commit()#确认订单详情表
        #获得订单详情ID
        self.c.execute('''select id from order_details''')
        self.main_id = self.c.fetchall()[-1][0]

    #展示订单详情
    def show_orders(self):
        sql_show_orders = f'''select o.order_date_time as '下单时间',
        ctm.name as '顾客名',
        od.quantity as '数量',
        g.name as '商品名' 
        from order_details as od 
        inner join orders as o 
        on od.order_id=o.id 
        inner join goods as g 
        on od.good_id=g.id
        inner join customers as ctm
        on ctm.id=o.customers_id
        where od.id={self.main_id};'''
        self.c.execute(sql_show_orders)
        print(self.c.fetchone())

run = Shop()

四、更进一步的思考

以下的内容,会出现在本文章未来的更新中

  1. 图片的URL可以存储到数据库,渲染到页面
  2. 写一个查询订单号的功能
  3. 现在写的查ID还有些繁琐,以后越来越精,会改进的
  4. 显示在网页或者小程序上
  5. ……暂时还没想到,搭个?云开发?爬虫?好像都不错
  6. 小伙伴们提个建议咯
发布了48 篇原创文章 · 获赞 30 · 访问量 4671

猜你喜欢

转载自blog.csdn.net/weixin_44925501/article/details/102776698