Python day27_mysql与Python交互

jingdong用户登录注册查询功能的实现

准备数据

创建数据表格

-- 创建 "jingdong" 数据库
create database jing_dong charset=utf8;

-- 使用 "jingdong" 数据库
use jing_dong;

-- 创建一个商品goods数据表
create table goods(
    id int unsigned primary key auto_increment not null,
    name varchar(150) not null,
    cate_name varchar(40) not null,
    brand_name varchar(40) not null,
    price decimal(10,3) not null default 0,
    is_show bit not null default 1,
    is_saleoff bit not null default 0
);

插入数据

-- 向goods表中插入数据

insert into goods values(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',default,default); 
insert into goods values(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',default,default);
insert into goods values(0,'g150th 15.6英寸游戏本','游戏本','雷神','8499',default,default); 
insert into goods values(0,'x550cc 15.6英寸笔记本','笔记本','华硕','2799',default,default); 
insert into goods values(0,'x240 超极本','超级本','联想','4880',default,default); 
insert into goods values(0,'u330p 13.3英寸超极本','超级本','联想','4299',default,default); 
insert into goods values(0,'svp13226scb 触控超极本','超级本','索尼','7999',default,default); 
insert into goods values(0,'ipad mini 7.9英寸平板电脑','平板电脑','苹果','1998',default,default);
insert into goods values(0,'ipad air 9.7英寸平板电脑','平板电脑','苹果','3388',default,default); 
insert into goods values(0,'ipad mini 配备 retina 显示屏','平板电脑','苹果','2788',default,default); 
insert into goods values(0,'ideacentre c340 20英寸一体电脑 ','台式机','联想','3499',default,default); 
insert into goods values(0,'vostro 3800-r1206 台式电脑','台式机','戴尔','2899',default,default); 
insert into goods values(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',default,default); 
insert into goods values(0,'at7-7414lp 台式电脑 linux )','台式机','宏碁','3699',default,default); 
insert into goods values(0,'z220sff f4f06pa工作站','服务器/工作站','惠普','4288',default,default); 
insert into goods values(0,'poweredge ii服务器','服务器/工作站','戴尔','5388',default,default); 
insert into goods values(0,'mac pro专业级台式电脑','服务器/工作站','苹果','28888',default,default); 
insert into goods values(0,'hmz-t3w 头戴显示设备','笔记本配件','索尼','6999',default,default); 
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default); 
insert into goods values(0,'x3250 m4机架式服务器','服务器/工作站','ibm','6888',default,default); 
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default);

操作要求

"""-- 表结构说明
    1.jingdong商品表 goods
        -- 表结构和之前一样
    2.jingdong用户表 users   自己创建用户表
        -- id  用户名(字符串)  密码(字符串)

-- 操作流程及功能要求
    1. 用户注册
        1.1 用户名在数据库中唯一,用户在注册的时候需要校验用户名在数据库中是否存在,并做相应提示
        1.2 用户名和密码长度6-12位之间(除了长度限制自己可以扩展其他的,如:用户名指定组成等)
        1.3 用户密码输入两次并校验两次密码是否一致
    2. 用户登陆
        2.1 账号密码通过用户表校验是否正确
        2.2 登陆失败or成功做对应的提示
    3. 用户操作jingdong商品表
        3.1 登陆成功以后才可以操作goods表
        3.2 对商品表进行增删改查
"""

根据要求写代码

面向函数编程
import re
from pymysql import connect

# 定义一个用户信息类
class Userdata(object):
    def __init__(self):
        # 连接数据库
        self.conn = connect(host='localhost', port=3306, user='root', password='mysql', database='jing_dong', charset='utf8')
        # 获取游标对象
        self.cs1 = self.conn.cursor()

    def __enter__(self):
        return self.cs1,self.conn

    def __exit__(self,*args):
        # 关闭
        self.cs1.close()
        self.conn.close()


def register():
    """注册系统"""
    with Userdata() as (cs1,conn):
        # 执行sql 语句
        sql = """select name from users;"""
        cs1.execute(sql)
        # 获取用户信息
        user_info = cs1.fetchall()
    while True:
        user_name = input("请输入注册名6-12:")
        match = re.match(r'[0-9a-zA-Z]{6,12}',user_name)
        if match:
            if (user_name,) not in user_info:
                pwd1 = input("请输入注册密码:")
                pwd2 = input("请再次输入:")
                if pwd1 == pwd2:
                    with Userdata() as (cs1,conn):
                        sql = """insert into users(name,password) values(%s,%s);"""
                        cs1.execute(sql,(user_name,pwd1))
                        conn.commit()
                    print("注册成功!")
                    break
                else:
                    print("密码确认错误 请重新输入")
                    continue
            else:
                print("这个名字已经被注册过啦,请换一个")
                continue
        else:
            print("用户名必须在6-12位,请重新输入")
            continue


def find_info():
    """查询"""
    with Userdata() as (cs1,conn):
        # 执行sql语句
        sql = """select * from goods;"""
        cs1.execute(sql)
        info = cs1.fetchall()
    # 打印数据
    for tmp in info:
        print(tmp)


def add_info():
    """增加商品种类"""
    cate_name = input("请输入要增加的商品种类名:")
    with Userdata() as (cs1,conn):
        # 执行sql 语句
        sql = """insert into good_cates(name) values(%s);"""
        cs1.execute(sql,(cate_name,))
        conn.commit()
        cate_info =cs1.fetchall()


def modify_info():
    """查询并修改商品品牌"""
    with Userdata() as (cs1,conn):
        # 执行sql语句
        sql = """select * from good_brands;"""
        cs1.execute(sql)
        brand_info = cs1.fetchall()
    for tmp in brand_info:
        print(tmp)
    brand_id = input("请输入你想修改的品牌id")
    brand_name = input("请输入你想修改成什么:")
    with Userdata() as (cs1,conn):
        # 执行sql语句
        sql = """update good_brands set name = %s where id= %s;"""
        cs1.execute(sql,(brand_name,brand_id))
        conn.commit()


def delete_info():
    """删除商品信息"""
    delete_name = input("请输入你想删除的商品名字:")
    with Userdata() as (cs1,conn):
        # 执行sql语句
        sql = """delete from goods where name =%s"""
        cs1.execute(sql,(delete_name,))
        conn.commit()


def operate():
    """对jingdong商品表进行增删改查"""
    print("1>查询商品信息")
    print("2>增加商品种类")
    print("3>修改商品品牌")
    print("4>删除商品信息")
    print("0>退出")
    while True:
        cmd = input("请输入要执行的操作指令")
        if cmd == "1":
            find_info()
        elif cmd =="2":
            add_info()
        elif cmd =='3':
            modify_info()
        elif cmd =='4':
            delete_info()
        elif cmd =='0':
            print("期待亲再次光临~")
            break




def login():
    """登陆系统"""
    with Userdata() as (cs1,conn):
        # 执行sql语句
        sql = """select name,password from users;"""
        cs1.execute(sql)
        user_table = cs1.fetchall()
    while True:
        user_name = input("请输入用户名:")
        pwd = input("请输入密码:")
        if (user_name,pwd) not in user_table:
            print("用户不存在或者密码输入错误 请重试")
            continue
        else:
            print("登陆成功!")
            print("进入主页~")
            operate()
            break





def main():
    """用户注册登陆操作系统"""
    print("欢迎进入jing_dong购物界面")
    print("注册请输入1")
    print("登陆请输入2")
    while True:
        cmd = input("请输入:")
        if cmd == '1':
            # 用户注册
            register()
        if cmd == '2':
            # 用户登陆
            login()

if __name__ == '__main__':
    main()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,100评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,862评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,993评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,309评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,303评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,421评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,830评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,501评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,689评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,506评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,564评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,286评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,826评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,875评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,114评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,705评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,269评论 2 341

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,081评论 1 32
  • 杨倩,焦点讲师三期,漯河,坚持分享385天,(2018-1-19) 当孩子跟你顶嘴时 ...
    温心怡然阅读 156评论 0 0
  • 自从把早上跑步的习惯改为傍晚跑步之后,就很少感受到清晨一个人跑在路上,晨光朦胧,车辆稀疏的那种惬意安静的孤独...
    蜗牛小姐ms阅读 204评论 0 0
  • 今天在哗哗地雨声中迎来了团圆的节日--这就是2016年的中秋节。由于自己是个体户,当然享受不了国家的待遇。看着...
    下半辈子_阅读 281评论 0 0
  • 小楼深巷 人声鼎沸 如梦里儿时唤 蓦然回首已多年 依稀记 黑瓦宅院 红尘陌上 如何情寄 谁把狠话放远 雾锁轩窗照迷...
    星星需点灯阅读 260评论 0 0