1:Python2------>Python3
MySQLdb -------> PyMySQL (MySQLdb驱动从2014年1月停止了维护)
2:安装
https://pypi.python.org/pypi/PyMySQL
https://github.com/PyMySQL/PyMySQL
或者使用 pip install PyMySQL 命令
pip show PyMySQL 查看PyMySQL是否安装成功
3:python 与 mysql 交互
import pymysql.cursors
# 连接MySQL数据库
connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='198876', db='guest',
charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
# 通过cursor创建游标
cursor = connection.cursor()
# 创建sql 语句,并执行
sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
params = ['gdsf', '215323']
count = cursor.execute(sql, params)
result = cursor.fetchone() #读取查询结果的一条数据,result是一个(元祖),查询机为空集的话result = None
result1 = cursor.fetchall() # 返回多个元组,即返回多个记录((),()),如果没有结果 则返回 ()
# 提交SQL
cursor.close() # 关闭游标
connection.commit()
4:数据库增删改查
查询:select * from 表名;
插入:insert into 表名 values(...),(...)...;
修改:update 表名 set 列1=值1,列2=值2... where 条件
删除:delete from 表名 where 条件
5:数据库操作命令:
show databases; use 数据库名; select database(); create database 数据库名 charset=utf8; drop database 数据库名;
6:数据表操作:
查看当前数据库中所有表:show tables; 查看表结构:desc 表名;
创建表:create table 表名(列 类型 约束,...);
修改表-添加字段:alter table 表名 add 列名 类型约束;
修改表-修改字段:(重命名版)alter table 表名 change 原名 新名 类型及约束;
修改表-修改字段:(不重命名版)alter table 表名 modify 列名 类型及约束;
修改表-删除字段:alter table 表名 drop 列名;
删除表:drop table 表名;
查看表的创建语句: show create table 表名;
数据库备份:mysqldump –uroot –p 数据库名 > python.sql;
数据库恢复:mysql -uroot –p 数据库名 < python.sql
数据库查询:
(1)消除重复行:select distinct gender from students;
(2)比较运算符: = > >= < <= != <>
(3)逻辑运算符: and or not
(4)模糊查询: like % 表示任意多个任意字符 _表示一个任意字符
(5)范围查询: in 非连续范围 between 。。。 and。。。 表示连续区间
(6)空判断 : 判空:is null 判非空: is not null
(7) 优先级:优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符;and比or先运算,如果同时出现并希望先算or,需要结合()使用
(8)聚合函数:count(*)表示计算总行数,括号中写星与列名,结果是相同的;max(列)表示求此列的最大值;min(列)表示求此列的最小值;sum(列)表示求此列的和;avg(列)表示求此列的平均值
(9)按照字段分组,表示此字段相同的数据会被放到一个组中;分组后,分组的依据列会显示在结果集中,其他列不会显示在结果集中;可以对分组后的数据进行统计,做聚合运算select gender as 性别, count(*) from students group by gender;
(10)分组后筛选:having后面的条件运算符与where的相同;where是对from后面指定的表进行数据筛选,属于对原始数据的筛选;having是对group by的结果进行筛选
(11)排序:将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推;默认按照列值从小到大排列;asc从小到大排列,即升序;desc从大到小排序,即降序、
(12)获取部分行:limit start,count 从start开始,获取count条数据;start索引从0开始
(13)分页:每页显示m条数据,当前显示第n页;求总页数:此段逻辑后面会在python中实现;查询总条数p1;使用p1除以m得到p2;如果整除则p2为总数页;如果不整除则p2+1为总页数;求第n页的数据
(14)inner join on
(15)子查询:查询学生与班级对应的信息select * from (select stu.*,cls.name as clsname from students as stu inner join classes as cls on stu.clsid=cls.id) as t1;
(16)总结:from 表名 ;where ....;group by ...;select distinct *;having ...;order by ..;.limit start,count
(17)创建账户并且授权:grant 权限列表 on 数据库 to '用户名'@'访问主机' identified by '密码';
(18)使用root登录: mysql -uroot -p