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     |
+----+--------+--------+----+--------+

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM