PYmysql的连接以及高级使用

目录

一.pymysql的连接

1.注意事项:使用pymsql第三方库文件名不能使用pymysql,这是兵之大忌

2.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); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值