<34>python学习笔记——mysql

来源:互联网 发布:河北网络广播电视台 编辑:程序博客网 时间:2024/05/15 05:07

官网下载安装mysql

点击打开链接

安装方式:点击打开链接

python3下不能使用Mysqldb,需要用到pymysql

>>>pip install pymysql

安装navicat数据库管理软件

SQL 的分类:
1 / 数据查询语言(DQL)。 代表关键字:select
2 / 数据操纵语言(DML)。 代表关键字:insert,delete,update
3 / 数据定义语言(DDL)。 代表关键字:create,drop,alter
4 / 事务控制语言(TCL)。 代表关键字:commit,rollback
5 / 数据控制语言(DCL)。 代表关键字:grant.revoke

CMDmysql数据库常用命令:

1 / 登陆数据库

> mysql -uroot -p

2 / 启动数据库(管理员权限下)

> net start mysql57  

3 / 关闭数据库(管理员权限下)

> net stop mysql57 

4 / 创建数据库

mysql > create database XXXX;

5 / 选择数据库

mysql > use XXXX;

6 / 导入数据库

mysql > source  D:\XXXX.sql  

7 / 删除数据库

mysql > drop database XXXX;

8 / 终止当前语句

\c

9 / 退出数据库

ctrl +c

—————查—————

————对数据库的查看————:

1 / 查看数据库版本:

---1 :在外部查看:

> mysql -V

---2:在内部查看:

mysql > select version();

2 / 查看数据库

mysql > show databases;

3 / 查看当前数据库的表格

mysql > show tables;

4 / 查看表结构

mysql > desc YYY;    / YYY是表名

5 / 查表

mysql > select * from YYYY;   /YYYY表名

6 / 查看当前使用的数据库

mysql > select database();

7 / 查看其他库中的表

mysql > show tables from XXXX;    /XXXX是别的数据库名

8 / 查看表的创建语句

mysql > show create table YYY;   /YYY表名

————对表的查询————:

————简单查询:

1 / 查询一个字段:

mysql > select  字段名  from  表名;

2 / 查询多个字段:

mysql > select  字段名,字段名,字段名  from  表名;

3 / 查询全部字段:

mysql > select * from 表明;

4 / 查询字段重命名:

mysql > select  字段名 as  新显示名字  from  表名;

————条件查询:where


and 的优先级高于 or 


1 /范例:= 等于

mysql> select
    -> empno,ename,sal  //查询的字段
    -> from
    -> emp     //表名
    -> where
    -> sal=5000;    //条件语句

2 / 范例:between...and...

mysql> select empno,ename,sal from emp where sal>=3000 and sal<=5000;

mysql> select empno,ename,sal from emp where sal between 3000 and 5000;   //等效于上一个例子

mysql> select ename from emp where ename between 'A' and 'K';

3 / 范例:查空

mysql> select ename,comm from emp where comm is null;

4 / 范例:in 在某个范围中搜索

mysql> select
    -> ename,job
    -> from
    -> emp
    -> where
    -> job in ('MANAGER','SALESMAN');

等效于:

mysql> select
    -> ename,job
    -> from
    -> emp
    -> where
    -> job='MANAGER' or job='SALESMAN';

5 / like 模糊查询

_ 下划线代表一个任意字符,% 百分号代表任意个字符

————单一字段排序:order by  (通过哪个或者哪些字段进行排序)

1 / 范例: (默认升序)asc

mysql> select
    -> ename,sal
    -> from
    -> emp
    -> order by
    -> sal asc;

2 / 范例:降序排序   desc

mysql> select
    -> ename,sal
    -> from
    -> emp
    -> order by
    -> sal desc;

3 / 范例:按多个字段进行排序

mysql> select ename,sal from emp order by saldesc,enameasc;

————数据处理函数 / 单行处理函数



1 / 范例:Lower 转小写 (只是查询结果显示,而不改变底层数据库)

mysql> select lower(ename) from emp;

2 / 范例:upper 转大写 

mysql> select  upper(ename) from emp;

3 / 范例:substr 取子串

mysql> select ename from emp where substr(ename,2,1)='A';

4 / 范例:length 获取字符串长度

mysql> select length(ename) from emp;

5 / 范例:trim 去前后空格

mysql> select ename from emp where ename = trim('   SMITH   ');

6 / 范例:round 四舍五入 (默认保留整数,可在后面增加保留小数位参数)

mysql> select round(123.456);

7 / 范例:rand 生成随机数

mysql> select rand();

8 / 范例:生成1~100范围随机数

mysql> select round(rand()*100);

————日期处理

MYSQL的日期格式:

%Y 年    %m 月    %d 日     %H 时     %i 分      %s 秒

1 / 字符串转换成日期格式:

str_to_date('日期字符串','日期格式');

范例:mysql> select ename,hiredate from emp where hiredate = str_to_date('12-17-1980','%m-%d-%Y');

2 / 日期格式转换成字符串格式

date_format('日期格式’,‘日期字符串’);

————分组函数 / 聚合函数 / 多行处理函数

(会自动忽略null值)

(分组函数不能直接使用在where关键字后面 = where关键字后面不能直接使用分组函数!因为先分组才能用分组函数!)



1 / 范例:统计

mysql> select count(ename) from emp;   //统计不为空的总和

mysql> select count(*) from emp where comm is null;    // 统计满足后面条件的总和

2 / 范例:求和

mysql> select sum(sal) from emp;

3 / 范例 :求平均值

mysql> select avg(sal) from emp;

4 / 范例:求最大值

mysql> select max(sal) from emp;

5 / 范例:求最小值

mysql> select min(sal) from emp;

————去重 distinct (查询去重,不会改变底层数据库)

mysql> select distinct job from emp;    

mysql> select distinct deptno,job from emp;   //distinct只能出现在所有字段的前面

mysql> select count(distinct job) from emp;   //查询统计有多少个岗位

————分组查询

group by  子句  (通过哪个或者哪些字段进行分组)

1 / 范例:找出每个工作岗位的最高薪水(先按照工作岗位分组,使用max函数求最大值)

mysql> select max(sal) from emp group by job;   //先分组,然后求最大值

mysql> select job,max(sal) from emp group by job;    //注意是先分组,后查询,所以job可以放在select后面

2 / 范例:找出每个部门的平均薪水

mysql> select deptno,avg(sal) as avgsal from empgroup by deptno;

3 / 范例:计算不同部门中 不同工作岗位的最高薪水:(两个限定条件

mysql> select deotno,job,max(sal) from emp group by deptno,job;   //两个字段联合起来看成一个字段

4 / 范例:找出每个工作岗位的最高薪水,除了MANAGER之外  (排除某一个条件

mysql> select job,max(sal) from emp where job<>'MANAGER'group by job;    //先用where排除掉不要的条件

having  子句  (分组之后过滤数据)

having 和 where (分组之后过滤数据)    where是分组之前过滤数据

1 / 范例:找出每个工作岗位的平均薪水,要求显示平均薪水大于1500的

mysql> select job,avg(sal) from emp group by job having avg(sal)>1500;    //having在分组之后调用分组函数

——————DQL语句的总结:

1 / 语句关键字顺序!!不能变!!

select ....    

from ....            

where....         

group by ....      

having....          

order by .....     

2 / 执行顺序:

from ....             //从某张表中检索数据

where....           //经过某条件进行过滤

group by ....      //然后分组

having....          //分组之后不满意再过滤

select ....          //查询出来

order by .....     //排序输出

——————表的连接查询(跨表查询):




常用命令

1 / 查看数据库
show databases;
2 / 创建数据库
create database name charset utf8 ;   #name :数据库名 。charset utf8 加入字符集编码,用以操作中文
3 / 进入数据库
use name; #name :数据库名
4 / 查看表
show tables;
5 / 创建表(例)
create table name       # name:表名
(
id int not null auto_inctement primary key,
name char(32) not null,
sex char(8) not null,
age tinyint unsigned not null,
tel char(13) null default "-"
);
6 / 查看表
desc name  #name 表名
7 / 查看如何创建的表
show create table name #name:表名
8 / 插入数据操作
insert  into name(name,sex,age,tel) values('值1',‘值2’,‘值3’,‘值4');
9 / 查看表中所有数据
select * from name;
10 / 条件查询
select * from name where age >20;  #age>20 是查询条件
11 / 多条件查询
select * from students where age >15 and sex = 'men';
12 / 模糊查询
select * from name where age like "1%"; "1%"表示查询1开头的年龄
13 / 数据修改
updata name set age =26 where name='dralon'; #修改哪个人的某个值
14 / 批量修改
updata name set age =26; #不指定修改哪个人的
15 / 删除
delete from name where name ='long'; #修改某个名字的行
16 / 插入新的字段
alter table name add column nal char(64);

pythonmysqlapi常用操作
python中对数据库的操作用一下格式,加上mysql的增删改查命令
import pymysqlconn = pymysql.connect(host='127.0.0.1',user='root',passwd='password',db='ddtest') #链接数据库cur = conn.cursor() #游标reCount = cur.execute('insert into students(name,sex,age,tel) values(%s,%s,%s,%s)',('haha','man',26,1353456456))#插入数据操作。使用数据库操作命令conn.commit()#执行写入操作cur.close()conn.close()
取数据
游标.fetchmany(参数) 参数为取多少条
游标.fetchone() 取一条
游标. fetchall() 全部取出
通过游标取出的数据以元组列表的形式返回。
import pymysqlconn = pymysql.connect(host='127.0.0.1',user='root',passwd='password',db='ddtest') #链接数据库cur = conn.cursor() #游标reCount = cur.execute('select * from students')#查找数据操作。使用数据库操作命令conn.commit()#执行写入操作#去除数据res = cur.fetchone()res2 = cur.fetchmany(2)res3 = cur.fetchall() ##前面语句取出后,表中数据会被减少print(res)print(res2)print(res3)cur.close()conn.close()
结果:
(1, 'dralon', 'male', 38, '12345678922')((2, 'zhuzhu', 'women', 28, '12345678922'), (3, 'long', 'men', 35, '12345678922'))((4, 'haha', 'man', 26, '1353456456'), (5, 'haha', 'man', 26, '1353456456'))

回滚:

-----------------------------------------------------------------------
表(table):

:字段(column)
字段的四个属性:字段名字,字段数据类型,字段长度,字段约束(非空,唯一性)
:数据 (记录)





0 0
原创粉丝点击