python 操作mysql数据库之模拟购物系统登录及购物
python 操作mysql数据库之模拟购物系统登录及购物,功能包含普通用户、管理员登录,查看商品、购买商品、添加商品,用户充值等。
mysql 数据库shop 表结构创建如下:
create TABLE userinfo (
u_id int(10) not null auto_increment,
u_name varchar(35),
u_passwd varchar(35),
money decimal(10,2),
role int(5),
primary key(u_id)
)CHARACTER set utf8 COLLATE utf8_general_ci; CREATE TABLE product(
p_id int(10) NOT NULL auto_increment,
p_name VARCHAR(35),
p_price DECIMAL(10,2),
PRIMARY KEY (p_id)
)CHARACTER SET utf8 COLLATE utf8_general_ci; create table carts(
c_id int(10) not null auto_increment,
u_id int(10) NOT null,
p_id int(10) NOT null,
PRIMARY key (c_id)
)CHARACTER SET utf8 COLLATE utf8_general_ci;
初始化插入的数据如下:
insert into userinfo (u_name,u_passwd,money,role)VALUES('sp1','',100000.55,1);
insert into userinfo (u_name,u_passwd,money,role)VALUES('sp3','',100000.55,1);
insert into userinfo (u_name,u_passwd,money,role)VALUES('sp3','',100000.55,1);
insert into product(p_name,p_price) values('MI',1999.00);
insert into product(p_name,p_price) values('MAC',1999.00);
insert into product(p_name,p_price) values('iphoneX',1999.00);
insert into product(p_name,p_price) values('VIVO',1999.00);
项目结构如下:

confsetting.py 为配置文件,存放系统常量:
HOST = '172.16.2.163'
USER = 'root'
PASSWD = ''
DB_NAME = 'shop'
lib目录下存放系统功能和常用函数:
mysql.py内容:
def op_mysql(host,user,passwd,db,sql,charset='utf8',port=3306):
"操作数据库"
import pymysql
from pymysql.cursors import DictCursor
coon = pymysql.connect(host=host,user=user,passwd=passwd,db=db,charset=charset,port=port)
cur = coon.cursor(DictCursor) # 定义一个游标,返回一个字典类型
cur.execute(sql)
if sql.strip().startswith('select'):
res = cur.fetchall()
else:
coon.commit()
res = 'ok'
cur.close()
coon.close()
return res
action.py内容:
from conf.confsetting import HOST,USER,PASSWD,DB_NAME
from lib.mysql import op_mysql def login(u_name, u_pass):
"用户登录"
name = str(u_name)
passwd = str(u_pass)
res = None
if not name or not passwd:
print("error,用户名或密码不能为空!")
else:
my_sql = "select u.u_id,u.u_name,u.u_passwd,u.money,u.role from userinfo u where u.u_name='%s';" % name
user_info = op_mysql(host=HOST, user=USER, passwd=PASSWD, db=DB_NAME, sql=my_sql)
if len(user_info) == 0:
print('error,用户名不存在')
else:
for u in user_info: # 可能存在同名
if u['u_passwd'] == passwd:
print('用户:{u} 登录成功!'.format(u=u))
res = u
if not res:
print('error,密码输入错误')
return res def get_goods():
"查询所有商品"
my_sql = "select p.* from product p;"
goods_info = op_mysql(host=HOST, user=USER, passwd=PASSWD, db=DB_NAME, sql=my_sql)
print('success,查询所有商品成功,商品信息:', goods_info)
return goods_info def bug_goods(u_info, g_name):
"用户购买商品"
res =None
g_name = str(g_name)
if not g_name :
print('购买商品名称不能为空!')
else:
goods_info = get_goods()
for i in range(len(goods_info)):
if goods_info[i]['p_name'] == g_name:
if u_info['money'] < goods_info[i]['p_price']:
res = '余额不足购买商品失败!', goods_info[i]
else:
new_money = u_info['money'] - goods_info[i]['p_price']
new_money =round(new_money,2)
my_sql_1 = "update userinfo set money = '%d' where u_id = '%d';"%(new_money,u_info['u_id'])
my_sql_2 = "INSERT INTO carts (u_id,p_id) VALUES('%d','%d');"%(u_info['u_id'],goods_info[i]['p_id'])
op_mysql(host=HOST, user=USER, passwd=PASSWD, db=DB_NAME, sql=my_sql_1)
op_mysql(host=HOST, user=USER, passwd=PASSWD, db=DB_NAME, sql=my_sql_2)
res = '购买商品成功!', goods_info[i]
if not res:
res = 'error ,购买商品%s不存在'% g_name
return res def get_carts_money(u_id):
"查询用户购物车、余额"
my_sql = "select u.money from userinfo u where u.u_id ='%d';"% u_id
u_money = op_mysql(host=HOST, user=USER, passwd=PASSWD, db=DB_NAME, sql=my_sql)
my_sql = "select p.p_name from userinfo u ,carts c ,product p where u.u_id='%d'and u.u_id =c.u_id and c.p_id= p.p_id; "%u_id
u_cart = op_mysql(host=HOST, user=USER, passwd=PASSWD, db=DB_NAME, sql=my_sql)
return "账户余额:{m} 购物车:{c}".format(m =u_money,c =u_cart) def add_goods(g_name, g_price):
"添加商品"
if not g_name:
return 'error,添加商品失败,商品名称必须输入'
price = round(float(g_price), 2)
if price <= 0:
return 'error,添加商品失败,商品价格须大于0'
my_sql = "insert into product(p_name,p_price) values('%s','%s');"%(g_name,g_price)
op_mysql(host=HOST, user=USER, passwd=PASSWD, db=DB_NAME, sql=my_sql)
return 'success,添加商品:%s成功'% g_name def recharge(u_id, amount):
"输入用户ID给用户充值"
u_id = int(u_id)
u_amount = round(float(amount), 2)
if u_amount <= 0:
return 'error,充值金额须大于0'
my_sql = "select u.u_name,u.money from userinfo u where u.u_id ='%d';" % u_id
user_info = op_mysql(host=HOST, user=USER, passwd=PASSWD, db=DB_NAME, sql=my_sql)
if len(user_info) == 0:
return '用户id不存在'
new_money = user_info[0]['money'] + u_amount
my_sql = "update userinfo set money = '%d' where u_id = '%d';"%(new_money,u_id)
op_mysql(host=HOST, user=USER, passwd=PASSWD, db=DB_NAME, sql=my_sql)
return 'success,给用户:%s 充值%s 元 成功'% (user_info[0]['u_name'],u_amount)
menu.py 内容:
from lib.action import get_goods,bug_goods,get_carts_money,add_goods,recharge def role_1(user):
"普通用户菜单"
choice = input('请输入你的选择:1:查看所有商品 2:购买商品 3:查看购物车和余额 4:退出\n').strip()
if choice == '':
print(get_goods())
elif choice == '':
goods_name = input("请输入要购买商品名称:\n").strip()
print(bug_goods(user, goods_name))
elif choice == '':
print(get_carts_money(user['u_id']))
elif choice == '':
exit('退出程序')
role_1(user) def role_2(user):
"管理员菜单"
choice = input('请输入你的选择:1:添加商品 2:给用户充值 3:退出\n').strip()
if choice == '':
goods_name = input("请输入你要添加的商品名称:\n").strip()
goods_price = input("请输入添加商品价格:\n").strip()
print(add_goods(goods_name, goods_price))
elif choice == '':
u_id = input("请输入你要充值的用户id:\n").strip()
amount = input("请输入充值金额:\n").strip()
print(recharge(u_id, amount))
elif choice == '':
exit('退出程序')
role_2(user)
bin 目录下存放启动文件:
start.py内容:
import os,sys
cur_path = os.path.abspath(__file__)
base_path = os.path.dirname(os.path.dirname(cur_path))
sys.path.insert(0,base_path)
from lib.action import login
from lib.menu import role_1,role_2 uName = input("请输入登录用户名:\n").strip()
uPass = input("请输入登录密码:\n").strip()
user = login(uName, uPass)
if user: # 用户登录成功
# 普通用户:
if user['role'] == 1:
role_1(user)
# 管理员用户:
elif user['role'] == 2:
role_2(user)
else:
print("用户角色不存在")
else:
print("用户尚未登录")
运行结果如下:


python 操作mysql数据库之模拟购物系统登录及购物的更多相关文章
- python接口自动化(三十八)-python操作mysql数据库(详解)
简介 现在的招聘要求对QA人员的要求越来越高,测试的一些基础知识就不必说了,来说测试知识以外的,会不会一门或者多门开发与语言,能不能读懂代码,会不会Linux,会不会搭建测试系统,会不会常用的数据库, ...
- python操作mysql数据库的相关操作实例
python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...
- Windows下安装MySQLdb, Python操作MySQL数据库的增删改查
这里的前提是windows上已经安装了MySQL数据库,且配置完成,能正常建表能操作. 在此基础上仅仅需安装MySQL-python-1.2.4b4.win32-py2.7.exe就ok了.仅仅有1M ...
- 使用python操作mysql数据库
这是我之前使用mysql时用到的一些库及开发的工具,这里记录下,也方便我查阅. python版本: 2.7.13 mysql版本: 5.5.36 几个python库 1.mysql-connector ...
- python操作三大主流数据库(1)python操作mysql①windows环境中安装python操作mysql数据库的MySQLdb模块mysql-client
windows安装python操作mysql数据库的MySQLdb模块mysql-client 正常情况下应该是cmd下直接运行 pip install mysql-client 命令即可,试了很多台 ...
- python操作mysql数据库增删改查的dbutils实例
python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...
- python操作mysql数据库的常用方法使用详解
python操作mysql数据库 1.环境准备: Linux 安装mysql: apt-get install mysql-server 安装python-mysql模块:apt-get instal ...
- 【Python】使用python操作mysql数据库
这是我之前使用mysql时用到的一些库及开发的工具,这里记录下,也方便我查阅. python版本: 2.7.13 mysql版本: 5.5.36 几个python库 1.mysql-connector ...
- python + docker, 实现天气数据 从FTP获取以及持久化(二)-- python操作MySQL数据库
前言 在这一节中,我们主要介绍如何使用python操作MySQL数据库. 准备 MySQL数据库使用的是上一节中的docker容器 “test-mysql”. Python 操作 MySQL 我们使用 ...
随机推荐
- 爬虫初窥day4:requests
Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 ...
- windows一键配置 php mysql apache 记录
记录下 方便查找(最近机器老重装 资料丢失严重) wamp http://www.wampserver.com/en/#download-wrapper https://sourceforge.net ...
- tomcat 配置域名访问应用
<Host appBase="webapps" autoDeploy="true" name="www.XXX.com" unpack ...
- javabean为什么需要序列化
无论用hibernate或者mybatis结合spring做开发还是其他,系统里持久类往往要实现序列化, implements Serializable.我还是比较好奇,为什么要这样做呢?一直只知道个 ...
- Spark学习笔记-GraphX-1
Spark学习笔记-GraphX-1 标签: SparkGraphGraphX图计算 2014-09-29 13:04 2339人阅读 评论(0) 收藏 举报 分类: Spark(8) 版权声明: ...
- OneZero第三周第三次站立会议(2016.4.6)
1. 时间: 13:05--13:15 共计10分钟. 2. 成员: X 夏一鸣 * 组长 (博客:http://www.cnblogs.com/xiaym896/), G 郭又铭 (博客:http ...
- idea properties编码问题
单个文件设置 全局设置default settings
- Time.fixedDeltaTime和Time.DeltaTime
在Update中使用 Time.deltaTime,获取到的是这一帧的时间,如果游戏卡,帧率低,那这个值就大.如果游戏流畅,帧率高,这个值就小,Time.deltaTime = 1.0f / 帧率 在 ...
- ELASTIC SEARCH 性能调优
ELASTICSEARCH 性能调优建议 创建索引调优 1.在创建索引的使用使用批量的方式导入到ES. 2.使用多线程的方式导入数据库. 3.增加默认刷新时间. 默认的刷新时间是1秒钟,这样会产生太多 ...
- form表单序列化为json格式数据
在web开发过程中,经常遇到将form序列化不能格式的字符串提交到后台,下面就介绍怎样将form表单序列化为json字符串. 首先,是扩展的jquery序列化插件,依赖jquery.经测试,这段代码可 ...