目录
1.注意事项:使用pymsql第三方库文件名不能使用pymysql,这是兵之大忌
一.pymysql的连接
1.注意事项:使用pymsql第三方库文件名不能使用pymysql,这是兵之大忌
2.pymysql的连接:
案例1:
# 1.导包 from pymysql import connect # 2.创建连接对象 conn = connect( host='localhost', user='root', port=3306, password='Fjp970214', database='py-1', charset='utf8' ) # 3.获取游标,目的就是要执行sql语句 cursor = conn.cursor() # 准备sql语句 sql = 'select * from student' # 4.执行sql语句,execute执行 cursor.execute(sql) # 获取查询的结果 row = cursor.fetchone() #查询的结果只有一条 print(row) # 5.关闭游标 cursor.close() # 6.关闭连接 conn.close()
案列2:
# 1.导包 from pymysql import connect # 2.创建连接对象 conn = connect( host='localhost', user='root', port=3306, password='Fjp970214', database='py-1', charset='utf8' ) # 3.获取游标,目的就是要执行sql语句 cursor = conn.cursor() # 准备sql语句 sql = 'select * from student' # 4.执行sql语句,execute执行 cursor.execute(sql) # 获取查询的结果 row = cursor.fetchall() # 可以查询到数据库中所有的数据 print(row) # 5.关闭游标 cursor.close() # 6.关闭连接 conn.close()
分析结果:案列一与案列二最终的结果是以元组的形式呈现的,案列一只能查询到数据库当中的一条数据,案列二可以查询到数据库当中的所有数据
如果想要拿到一个一个的数据,可以进行for循环遍历
案例三:
# 1.导包 from pymysql import connect # 2.创建连接对象 conn = connect( host='localhost', user='root', port=3306, password='Fjp970214', database='py-1', charset='utf8' ) # 3.获取游标,目的就是要执行sql语句 cursor = conn.cursor() # 准备sql语句 sql = 'select * from student' # 4.执行sql语句,execute执行 cursor.execute(sql) # 获取查询的结果 row = cursor.fetchall() for i in row: print(i) # 5.关闭游标 cursor.close() # 6.关闭连接 conn.close()
二:对数据表进行添加,修改,删除等操作,我们需要把数据提交到数据库当中
注意:提交修改的数据到数据库中
1.conn.commit()
# 1.导包 from pymysql import connect # 2.创建连接对象 conn = connect( host='localhost', port=3306, user='root', password='Fjp970214', database='py-1', charset='utf8' ) # 3.获取游标,目的就是执行sql语句 cursor = conn.cursor() # 准备sql语句 sql = "delete from student where id between 4 and 5" # 4.执行sql语句,execute执行 cursor.execute(sql) # 提交修改的数据到数据库 conn.commit() # 5.关闭游标 cursor.close() # 6.关闭连接 conn.close()
注释:只有将数据提交到数据库中,才会在数据库中显示修改的结果,否则修改的结果就是在缓冲空间当中,不会在数据库中显示
2.回滚
coon.rollback()表示回滚数据
# 1.导包 from pymysql import connect # 2.创建连接对象 conn = connect( host='localhost', port=3306, user='root', password='Fjp970214', database='py-1', charset='utf8' ) # 3.获取游标,目的就是执行sql语句 cursor = conn.cursor() # 准备sql语句 sql = "delete from student where id between 4 and 5" # 4.执行sql语句,execute执行 try: cursor.execute(sql) # 提交修改的数据到数据库 conn.commit() except Exception as e: # 如果sql语句发生异常进行撤销,表示数据回滚,回滚就是回到没有修改数据之前的一个状态 conn.rollback() # 5.关闭游标 cursor.close() # 6.关闭连接 conn.close()
注释:进行回滚操作的时候,操作4会发生些许的变化
总结:
1.导包
import pymysql
2.创建连接对象
conn = pymysql.connect(参数)
3.获取游标对象
cursor = conn.cursor()
4.执行sql语句
row=cursor.execute(sql)
5.获取查询的结果
cursor.fetchone() #只获取一条数据
cursor.fechall() #可以获取全部的数据
6..将修改的操作提交到数据库中
conn.comit()
7.回滚数据
conn.rollback()
三.事务的介绍
1.定义:事务就是用户定义的一系列执行sql语句的操作,这些操作要么完全的执行,要不完全的都不执行,它是一个完全不可分割的工作执行单元。
2.事务的四大特性:
- 原子性
- 一致性
- 隔离性
- 持久性
3.在使用事务之前,首先必须确定存储类型是不是InnoDB,只有这个类型才可以使用事务。
MYSQL数据库中表的存储引擎默认是InnoDB
表的存储引擎:表的存储引擎就是提供存储数据的一种体制,不同表的存储引擎提供不同的存储机制
#查看MYSQL数据库支持的表的存储引擎
show engines;
说明:我们常用的表的存储引擎是InnoDB和MYISAM
只有InnoDB才具有索引
而MYISAM不支持索引,优势是访问速度快,对事务没有要求,或者以select,insert为主的都可以使用该存储引擎来创建表
4.想要修改表的存储引擎:alter table 表名 engines=引擎类型
5.(1)开启事务:
begin;
或者
start transaction;
(2)取消自动提交
set autocommit=0; # 取消自动提交
set autocommit=1; #设置为自动提交
(3)sql语句的执行
(4)手动提交
commit; 如果不进行手动提交,则结果不会显示到数据库当中、
rollback;
注意:
- 开启事务执行修改命令,变更数据会保存到MYSQL服务端的缓冲文件中,而不是维护到物理表
- MYSQL数据库默认采用自动提交的模式,如果没有显示的开启一个事务,那么每条sql语句都会被当作一个事务执行提交操作
- 当设置autocommit=0,就是取消了自动提交事务模式,直到显示的执行commit和rollback表示该事务结束
提交事务:commit
将本地缓冲文件中的数据提交到物理表中,完成数据的更新
回滚事务:rollback
放弃本地缓冲中的缓冲数据,表示回到开始事务前的状态
五:索引
1定义:索引在MYSQL当中也叫做“键”,它是一个特殊的文件,它保存这着数据表里所有记录的位置信息。
2.索引的使用
(1)查看表中已有的索引
show index from 表名;
(2).索引的创建
alter table 表名 add index 索引列名(列名);
alter table classes add index my_name(name);
(3)索引的删除
alter table classes drop index my_name;
六.案例的操作:验证索引的查询性能
1.创建测试表mytest
create table mytext(title varchar(50) not null);
2.向表中插入10万条数据:
from pymysql import connect def main(): conn = connect( host='localhost', port=3306, user='root', password='Fjp970214', database='py-1', charset='utf8' ) cursor = conn.cursor() sql = 'insert into mytest(title) values(%s)' # 插入10万条数据: try: for i in range(100000): cursor.execute(sql, ["test"+str(i)]) conn.commit() except Exception as e: conn.rollback() finally: cursor.close() conn.close() if __name__ == '__main__': main()
3.验证索引性能操作
开启运行时间检测:
set profiling=1;
查找第一万条数据: test9999
select * from mytest where title = 'test9999';
查看执行的时间
show profiles;
给title字段创建索引
alter table mytest add index(title);