• MySQL和python交互


    准备工作:
    创建数据表
    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()
  • 相关阅读:
    fetch数据请求
    React exact路由精确匹配
    React Router中的Link和NavLink组件有什么区别?
    new FileReader() 文件上传
    git stash部分文件
    主机屋的免费云虚拟主机
    MySQL数据库默认的存储引擎类型是MyISAM并不支持事务的坑,要把存储类型改为InnoDB
    使用ExcelPackage,OfficeOpenXml做EXCEL导入时一个方法的坑,对应类的字段只能定义为string类型
    mysql两个关联表,同名字段同时返回时,原字段名写靠前的表的字段名会可以保留原字段名,靠后的会被自动as为(1)这样的,
    MySql 里的IFNULL、NULLIF和ISNULL用法-区别于MSSQL
  • 原文地址:https://www.cnblogs.com/zc2018/p/8891851.html
Copyright © 2020-2023  润新知