• Python之MySQL数据操作


    一、增

    1.1 单条数据增加

    语法: insert into 表名(字段1,字段2...) values(字段1的值,字段2的值...) 

     1.2  多条插入

    mysql> create table idc(
        -> id int auto_increment primary key,
        -> name varchar(32) not null,
        -> position varchar(10) not null)
        -> engine = innodb default charset = utf8;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> desc idc;
    +----------+-------------+------+-----+---------+----------------+
    | Field    | Type        | Null | Key | Default | Extra          |
    +----------+-------------+------+-----+---------+----------------+
    | id       | int(11)     | NO   | PRI | NULL    | auto_increment |
    | name     | varchar(32) | NO   |     | NULL    |                |
    | position | varchar(10) | NO   |     | NULL    |                |
    +----------+-------------+------+-----+---------+----------------+
    3 rows in set (0.00 sec)
    
    # 插入多条数据
    mysql> insert into idc(name,position) values('博兴','北京'),('大族','北京'),('纪蕴','上海');
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    mysql> select * from idc;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 纪蕴   | 上海     |
    +----+--------+----------+
    3 rows in set (0.00 sec)

    1.3 根据从其他表查到的数据插入到新表中

    mysql> create table idc_new( id int auto_increment primary key, name varchar(32) not null, position varchar(10) not null) engine = innno
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select * from idc_new;
    Empty set (0.00 sec)
    
    mysql> select * from idc;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 纪蕴   | 上海     |
    +----+--------+----------+
    3 rows in set (0.00 sec)
    
    mysql> insert into idc_new(name,position) select name,position from idc;
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    mysql> select * from idc_new;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 纪蕴   | 上海     |
    +----+--------+----------+
    3 rows in set (0.00 sec)

    二、删

    语法: delete from 表名 where 条件

    三、改

    语法: update 表名 set 字段1=新值,字段2=新值,字段3=新值... where 条件

    修改多个字段

    mysql> select * from idc;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 纪蕴   | 上海     |
    +----+--------+----------+
    3 rows in set (0.00 sec)
    
    mysql> update idc set name = '大龙',position='邯郸' where id = 3;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from idc;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 大龙   | 邯郸     |
    +----+--------+----------+
    3 rows in set (0.00 sec)

    四、查

    4.1 单表查询

    4.1.1  将表里的所有字段的所有数据都查出来

    • *代表所有
    select * from test;

    4.1.2   只查指定字段的所有数据

    # select 字段1,字段2 ... from 表;
    select user,host from mysql.user;

    4.1.3 别名

    mysql> select * from idc_new;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 纪蕴   | 上海     |
    +----+--------+----------+
    3 rows in set (0.00 sec)
    
    mysql> select id,name as 机房名称,position as 机房位置 from idc_new;
    +----+--------------+--------------+
    | id | 机房名称     | 机房位置     |
    +----+--------------+--------------+
    |  1 | 博兴         | 北京         |
    |  2 | 大族         | 北京         |
    |  3 | 纪蕴         | 上海         |
    +----+--------------+--------------+

    4.1.4  等于,不等于

    mysql> select * from idc_new;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 纪蕴   | 上海     |
    +----+--------+----------+
    3 rows in set (0.00 sec)
    
    mysql> select * from idc_new where position = '北京';
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    +----+--------+----------+
    2 rows in set (0.00 sec)
    
    mysql> select * from idc_new where position != '北京';
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  3 | 纪蕴   | 上海     |
    +----+--------+----------+
    1 row in set (0.00 sec)

    4.1.5  in和not in

    mysql> select * from idc_new;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 纪蕴   | 上海     |
    |  4 | 后场   | 邯郸     |
    +----+--------+----------+
    4 rows in set (0.00 sec)
    
    mysql> select * from idc_new where id in (1,3,4);
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  3 | 纪蕴   | 上海     |
    |  4 | 后场   | 邯郸     |
    +----+--------+----------+
    3 rows in set (0.00 sec)
    
    mysql> select * from idc_new where id not in (1,3,4);
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  2 | 大族   | 北京     |
    +----+--------+----------+
    1 row in set (0.00 sec)

    # in (可以某个SQL查询出来结果)

    mysql> select * from idc;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 大龙   | 邯郸     |
    +----+--------+----------+
    3 rows in set (0.00 sec)
    
    mysql> select * from idc_new;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 纪蕴   | 上海     |
    |  4 | 后场   | 邯郸     |
    +----+--------+----------+
    4 rows in set (0.00 sec)
    
    mysql> select * from idc_new where id in (select id from idc);
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 纪蕴   | 上海     |
    +----+--------+----------+
    3 rows in set (0.00 sec)

    4.1.6  between and

    • 闭区间
    mysql> select * from idc_new;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 纪蕴   | 上海     |
    |  4 | 后场   | 邯郸     |
    +----+--------+----------+
    4 rows in set (0.00 sec)
    
    mysql> select * from idc_new where id between 1 and 3;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 纪蕴   | 上海     |
    +----+--------+----------+
    3 rows in set (0.00 sec)

    4.1.7  通配符

    • % 多个
    • _ 一个
    # % 
    mysql> select * from idc_new;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 纪蕴   | 上海     |
    |  4 | 后场   | 邯郸     |
    +----+--------+----------+
    4 rows in set (0.00 sec)
    
    mysql> select * from idc_new where position like "北%";
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    +----+--------+----------+
    2 rows in set (0.00 sec)

    # —_代表一个占位符

    mysql> select * from idc_new where position like "北_";
    +----+--------+----------+
    | id | name | position |
    +----+--------+----------+
    | 1 | 博兴 | 北京 |
    | 2 | 大族 | 北京 |
    +----+--------+----------+
    2 rows in set (0.00 sec)

    4.1.8  limit 

    limit a ,b    从a往后查b条数据

    mysql> select * from employee;
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | wangys   |
    |  2 | wc       |
    |  3 | huisz    |
    |  4 | chaoyf   |
    |  5 | anyl     |
    |  6 | xiaolong |
    |  7 | jiayue   |
    |  8 | a        |
    |  9 | b        |
    | 10 | c        |
    | 11 | d        |
    | 12 | e        |
    | 13 | f        |
    | 14 | g        |
    | 15 | h        |
    +----+----------+
    15 rows in set (0.00 sec)
    
    mysql> select * from employee limit 5;
    +----+--------+
    | id | name   |
    +----+--------+
    |  1 | wangys |
    |  2 | wc     |
    |  3 | huisz  |
    |  4 | chaoyf |
    |  5 | anyl   |
    +----+--------+
    5 rows in set (0.00 sec)
    
    mysql> select * from employee limit 5,5;
    +----+----------+
    | id | name     |
    +----+----------+
    |  6 | xiaolong |
    |  7 | jiayue   |
    |  8 | a        |
    |  9 | b        |
    | 10 | c        |
    +----+----------+
    5 rows in set (0.00 sec)
    
    mysql> select * from employee limit 10,5;
    +----+------+
    | id | name |
    +----+------+
    | 11 | d    |
    | 12 | e    |
    | 13 | f    |
    | 14 | g    |
    | 15 | h    |
    +----+------+
    5 rows in set (0.00 sec)

    分页

    page = int(input('请输入要查看第几页'))
    records = 10
    page_offset = (page-1)*records # 计算从第几条数据开始
    print('select * from t1 limit %s %s'%(page_offset,records))

    4.1.9 排序

    • asc 正序
    • desc 倒叙
    • 可以使用多个条件排序,前一个条件先进行排序,后面一个条件后进行排序
    mysql> select * from idc_new;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 纪蕴   | 上海     |
    |  4 | 后场   | 邯郸     |
    +----+--------+----------+
    4 rows in set (0.00 sec)
    
    mysql> select * from idc_new order by id asc;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  1 | 博兴   | 北京     |
    |  2 | 大族   | 北京     |
    |  3 | 纪蕴   | 上海     |
    |  4 | 后场   | 邯郸     |
    +----+--------+----------+
    4 rows in set (0.00 sec)
    
    mysql> select * from idc_new order by id desc;
    +----+--------+----------+
    | id | name   | position |
    +----+--------+----------+
    |  4 | 后场   | 邯郸     |
    |  3 | 纪蕴   | 上海     |
    |  2 | 大族   | 北京     |
    |  1 | 博兴   | 北京     |
    +----+--------+----------+
    4 rows in set (0.00 sec)

    # 线倒叙,后limit 去后几行

    mysql> select * from idc_new order by id desc limit 2;
    +----+--------+----------+
    | id | name | position |
    +----+--------+----------+
    | 4 | 后场 | 邯郸 |
    | 3 | 纪蕴 | 上海 |
    +----+--------+----------+
    2 rows in set (0.00 sec)

     

    4.1.10  分组

    group by  对谁进行分组

    mysql> select * from departments;
    +----+--------+
    | id | name   |
    +----+--------+
    |  4 | IT     |
    |  5 | 销售   |
    |  6 | 产品   |
    +----+--------+
    3 rows in set (0.00 sec)
    
    mysql> select * from employee;
    +----+--------+--------+
    | id | name   | dpt_id |
    +----+--------+--------+
    |  1 | 老王   |      4 |
    |  2 | 老郭   |      6 |
    |  3 | 老刘   |      5 |
    |  4 | 老惠   |      4 |
    +----+--------+--------+
    4 rows in set (0.00 sec)
    
    # 查看各个部门都有多少人
    mysql> select count(1),dpt_id from employee group by dpt_id;
    +----------+--------+
    | count(1) | dpt_id |
    +----------+--------+
    |        2 |      4 |
    |        1 |      5 |
    |        1 |      6 |
    +----------+--------+
    3 rows in set (0.00 sec)

    如果对于聚合函数结果进行二次筛选时,必须使用having 

    # 查看部门人数大于1的部门
    mysql> select count(1),dpt_id from employee group by dpt_id having count(1) >1; +----------+--------+ | count(1) | dpt_id | +----------+--------+ | 2 | 4 | +----------+--------+ 1 row in set (0.00 sec)

    4.2 连表查询

    4.2.1 连表查询的方法

    mysql> select * from departments;
    +----+--------+
    | id | name   |
    +----+--------+
    |  4 | IT     |
    |  5 | 销售   |
    |  6 | 产品   |
    +----+--------+
    3 rows in set (0.00 sec)
    
    mysql> select * from employee;
    +----+--------+--------+
    | id | name   | dpt_id |
    +----+--------+--------+
    |  1 | 老王   |      4 |
    |  2 | 老郭   |      6 |
    |  3 | 老刘   |      5 |
    |  4 | 老惠   |      4 |
    mysql> select * from departments,employee where departments.id = employee.dpt_id; +----+--------+----+--------+--------+ | id | name | id | name | dpt_id | +----+--------+----+--------+--------+ | 4 | IT | 1 | 老王 | 4 | | 6 | 产品 | 2 | 老郭 | 6 | | 5 | 销售 | 3 | 老刘 | 5 | | 4 | IT | 4 | 老惠 | 4 | +----+--------+----+--------+--------+ | 4 | +----+--------+--------+ 4 rows in set (0.00 sec)

     

    mysql> select * from employee left join departments on employee.dpt_id = departments.id;
    +----+--------+--------+------+--------+
    | id | name   | dpt_id | id   | name   |
    +----+--------+--------+------+--------+
    |  1 | 老王   |      4 |    4 | IT     |
    |  4 | 老惠   |      4 |    4 | IT     |
    |  3 | 老刘   |      5 |    5 | 销售   |
    |  2 | 老郭   |      6 |    6 | 产品   |
    +----+--------+--------+------+--------+
    4 rows in set (0.00 sec)
    
    mysql> select * from employee right join departments on employee.dpt_id = departments.id;
    +------+--------+--------+----+--------+
    | id   | name   | dpt_id | id | name   |
    +------+--------+--------+----+--------+
    |    1 | 老王   |      4 |  4 | IT     |
    |    2 | 老郭   |      6 |  6 | 产品   |
    |    3 | 老刘   |      5 |  5 | 销售   |
    |    4 | 老惠   |      4 |  4 | IT     |
    +------+--------+--------+----+--------+
    4 rows in set (0.00 sec)
    
    mysql> select * from employee inner join departments on employee.dpt_id = departments.id;
    +----+--------+--------+----+--------+
    | id | name   | dpt_id | id | name   |
    +----+--------+--------+----+--------+
    |  1 | 老王   |      4 |  4 | IT     |
    |  2 | 老郭   |      6 |  6 | 产品   |
    |  3 | 老刘   |      5 |  5 | 销售   |
    |  4 | 老惠   |      4 |  4 | IT     |
    +----+--------+--------+----+--------+
  • 相关阅读:
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    软件工程实践总结
  • 原文地址:https://www.cnblogs.com/wc89/p/10468910.html
Copyright © 2020-2023  润新知