简易电商程序
一、确定需要的功能
二、生成一个电商数据库
- 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()
三、电商小程序代码实现
下列一切操作,都依据上面的数据库改变而成
- 先把刚才随便添加的数据删了
cmd中:
delete from orders where customers_id=601;
delete from customers where name=‘八海’;
delete from order_details where quantity=4;
- 新建一个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()
四、更进一步的思考
以下的内容,会出现在本文章未来的更新中
- 图片的URL可以存储到数据库,渲染到页面
- 写一个查询订单号的功能
- 现在写的查ID还有些繁琐,以后越来越精,会改进的
- 显示在网页或者小程序上
- ……暂时还没想到,搭个?云开发?爬虫?好像都不错
- 小伙伴们提个建议咯