zc2018

准备工作:
创建数据表
create database jing_dong charset=utf8;
use jing_dong;
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
);
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 查找 每种类型 中 最贵的 max_price 价格
select cate_name,max(price) as max_price from goods group by cate_name
-- 2 关联查询 inner join 每种类型 中最贵的物品信息
select * from goods
inner join
(select cate_name,max(price) as max_price from goods group by cate_name) as max_price_goods
on goods.cate_name=max_price_goods.cate_name and goods.price=max_price_goods.max_price;


-- 商品种类换成对应ID
-- 创建"商品分类"表,将商品

第一步 创建表 (商品种类表 goods_cates )

create table if not exists goods_cates(
id int unsigned primary key auto_increment,
name varchar(40) not null
);

 

第二步 同步 商品分类表 数据 将商品的所有 (种类信息) 写入到 (商品种类表) 中

-- 按照 分组 的方式查询 goods 表中的所有 种类(cate_name)
select cate_name from goods group by cate_name;

(注意) 把查询出来的 结果 写入 goods_cates 表里去 ( insert into ) 只插入name
insert into goods_cates(name) (select cate_name from goods group by cate_name);

 

第三部 同步 商品表 数据 通过 goods_cates 数据表来更新 goods 表

-- 因为要通过 goods_cates表 更新 goods 表 所以要把两个表连接起来
select * from goods inner join goods_cates on goods.cate_name = goods_cates.name;

-- 把 商品表 goods 中的 cate_name 全部替换成 商品分类表中的 商品id ( update ... set )
update (goods inner join goods_cates on goods.cate_name = goods_cates.name) set goods.cate_name = goods_cates.id;


第四部 修改表结构

-- 查看表结构(注意 两个表中的 外键类型需要一致)
-- 修改表结构 alter table 字段名字不同 change,把 cate_name 改成 cate_id int unsigned not null
alter table goods change cate_name cate_id int unsigned not null;

 

 

 

-- 创建 商品品牌表 goods_brands

第一步 创建 "商品品牌表" 表
-- 第一种方式 先创建表
create table goods_brands (
id int unsigned primary key auto_increment,
name varchar(40) not null
);

-- 插入数据 brand_name(分组)
-- 按照 分组 的方式查询 goods 表中的所有 种类(brand_name)
select brand_name from goods group by brand_name;
--(注意) 把查询出来的 结果 写入 goods_brands 表里去 ( insert into ) 只插入name
insert into goods_brands(name) (select brand_name from goods group by brand_name);


-- 第二种方式 创建表的同时插入数据(了解,不建议使用)
create table goods_brands (
id int unsigned primary key auto_increment,
name varchar(40) not null) select brand_name as name from goods group by brand_name;


第二步 同步数据
-- 通过goods_brands数据表来更新goods数据表 g.brand_name=b.id
select * from goods inner join goods_brands on goods.brand_name = goods_brands.name;
update (goods inner join goods_brands on goods.brand_name = goods_brands.name) set goods.brand_name = goods_brands.id;


第三部 修改表结构
-- 通过alter table语句修改表结构 brand_id int unsigned not null
alter table goods change brand_name brand_id int unsigned not null;


-- python与mysql的交互使用
-- 基本流程 1 connection对象 |2 cursor对象 |3 关闭cursor |4 关闭connection

from pymysql import *
conn=connect(参数列表)
# 参数host:连接的mysql主机,如果本机是\'localhost\'
# 参数port:连接的mysql主机的端口,默认是3306
# 参数database:数据库的名称
# 参数user:连接的用户名
# 参数password:连接的密码
# 参数charset:通信采用的编码方式,推荐使用utf8
cs1=conn.cursor()
sql = "sql语句"
cs1.execute(sql)
cs1.close()
conn.close()

 



具体案例:

import pymysql
    class JD(object):
        def __init__(self):
            # 建立连接
            self.conn = pymysql.connect(host=\'localhost\', port=3306, database=\'jing_dong\', user=\'root\', password=\'mysql\', charset=\'utf8\')
            # 建立游标
            self.cs1 = self.conn.cursor()

        def __del__(self):
            self.cs1.close()
            self.conn.close()

        def sql_execute(self, sql):
            self.cs1.execute(sql)
            content = self.cs1.fetchall()
            for i in content:
                print(i)
        @staticmethod
        def show_menu():
            print("1. 查看所有的商品信息")
            print("2. 查看所有的商品种类")
            print("3. 查看所有的商品品牌")
            print("4. 添加一个商品种类")
            print("5. 删除一个商品种类")
            print("6. 查看一个商品的信息")
            print("0. 退出")
            num = input("请选择你想要执行的操作:")
            return num

        def show_goods_info(self):
            # 使用sql语句
            sql = "select * from goods;"
            self.sql_execute(sql)

        def show_goods_cates(self):
            sql = "select * from goods_cates;"
            self.sql_execute(sql)

        def show_goods_brands(self):
            sql = "select * from goods_brands;"
            self.sql_execute(sql)

        def add_cate(self):
            name = input("请输入想要添加的商品种类:")
            sql = "insert into goods_cates(name) value(\'%s\')" % name
            self.sql_execute(sql)
            self.conn.commit()
        def del_cate(self):
            name = input("请输入想要删除的商品种类:")
            sql = "delete from goods_cates where name = \'%s\'" % name
            self.sql_execute(sql)
            self.conn.commit()
        def show_agoods_info(self):
            name = input("请输入想要查询商品的名字:")
            sql = "select * from goods where name = %s"
            # 防注入写法
            self.cs1.execute(sql, [name])
            content = self.cs1.fetchone()
            print(content)


        def run(self):
            while True:
                num = self.show_menu()
                if num == "1":
                    self.show_goods_info()
                elif num == "2":
                    self.show_goods_cates()
                elif num == "3":
                    self.show_goods_brands()
                elif num == "4":
                    self.add_cate()
                elif num == "5":
                    self.del_cate()
                elif num == "6":
                    self.show_agoods_info()
                elif num == "0":
                    break
                else:
                    print("没有这个选项")
    def main():
        jd = JD()

        jd.run()

    if __name__ == \'__main__\':
        main()

 

分类:

技术点:

相关文章: