python进阶:pymysql库与事务

  • 在开始本文内容前,先来谈谈数据库。各位小伙在学习数据类型的时候,都曾使用过容器类型来存储多条数据,像列表、元组、集合、字典等。在程序运行结束后,数据也会随着计算机的内存回收机制而消失。因此,为了永久地保存数据,我们采用文件来进行存储。那么,假设有这么一个场景,某个业务需要你存储上万条的个人信息,再采用以上方式存储会非常地费时废力,同时读取也相对麻烦。

  • 这就有了数据库的概念,简而言之就是数据存储的仓库,而仓库最大的优点包括空间大、分类有序、查找方便等。我们口中常说的数据库往往指的是数据库管理系统,英文名缩写DBMS(Database Manage System),按照存储方式分为关系型数据库和非关系型数据库。

  • 关系型数据库,以二维表及其联系来存储数据,代表的有Mysql、Oracle等
  • 非关系型数据库,以键值对的形式来存储数据,代表的有Redis、HBase等
  • 在python中,存在可以与mysql数据库进行交互的包,pymysql。小伙要是想尝试,需要先看看自己的python环境里有没有这个包,没有的话需要安装。见下图

  • 那么开始今天的这个正题,如何使用pymysql这个包?具体要按照以下这个步骤:
  • ①导包(PS:导包是一切的基础,要是敲完发现没导包,也太尴尬了~~)
  • ②创建连接的对象---类似于去酒店吃饭,先联系前台
  • ③创建游标----类似于前台帮你安排一位侍者小姐姐,它负责此次招待
  • ④执行SQL语句并获取结果集----类似于你报菜名,小姐姐给你上菜
  • ⑤操作结果集-----类似于酒足饭饱,到前台结账
  • ⑥释放资源-----这就很简单了,跟小姐姐和前台说再见

以查找为例,具体过程如下:

# 1.导包
import pymysql

# 2.创建连接对象
conn = pymysql.connect(
    host = 'xx.xx.xx.xx',   # 连接对象的ip地址,也可以通过域名映射
    port = 3306,            # mysql数据库的常用端口号,牢记!!!
    user = 'xxxx',          # 数据库用户名
    password = 'xxxxxx',    # 数据库密码
    database = 'xxx',       # 要连接的数据库
    charset = 'utf8'        # 编码格式
)

# 3.创建游标
cur = conn.cursor()

# 4.执行sql语句并获取结果集
sql = 'select * from xxx;'   # 单引号内为sql语句,注意要区分单双引号,分号结尾
row_count = cur.execute(sql)
print('您点了几道菜:{row_count}')

# 5.操作结果集
data = cur.fetchone() # 获取单条数据

data = cur.fetchmany(n) # 获取n条数据

for i in cur.fetchall(): # 遍历获取所有数据
    print(i)

# 6.释放资源
cur.close()
conn.close()
  • 讲完查找,就到增删改了。这得先切个内容,事务。有部分小伙可能学习mysql的时候,听说这个概念。这里我们在做一次简单回顾。
  • 事务,指的是逻辑上的一组操作,组成事务的各个逻辑单元要么全部执行成功,要么全部执行失败。 
  • 事务的四大特性(ACID):
  • ①原子性:组成事务的逻辑单元是最小单位,不可分割
  • ②一致性:事务执行后,数据结果应保持一致
  • ③隔离性:一个事务执行期间,不受其它事务的干扰
  • ④永久性:无论事务执行成功与否,其结果都要永久写入数据中
  • pymysql有关事务的相关语句:
  • 开启事务 begin
  • 提交事务 commit
  • 事务回滚 rollback
  • 回到正题,实现增删改大致于查的步骤类似,只不过需要在操作结果集的过程中进行事务的提交,这样结果才会永久保存。具体代码如下:
# 导包
import pymysql
# 函数:增
def add_data():
    # 1.获取连接对象
    conn = pymysql.connect(
        host = 'xxx.xxx.xxx.xxx',
        port = 3306,
        user = 'xxxx',
        password='xxxxxx',
        database='xxx',
        charset='utf8'
    )
    # 2.获取游标对象
    cur = conn.cursor()
    # 3.执行SQL语句,获取结果集
    sql = "insert into xxx values ();"
    row_count = cur.execute(sql)
    print(f'操作的行数:{row_count}')
    # 4.操作结果集
    conn.commit()
    # 5 释放资源
    cur.close()
    conn.close()
# 函数:改
def update_data():
    # 1.获取连接对象
    conn = pymysql.connect(
        host = 'xxx.xxx.xxx.xxx',
        port = 3306,
        user = 'xxxx',
        password='xxxxxx',
        database='xxx',
        charset='utf8'
    )
    # 2.获取游标对象
    cur = conn.cursor()
    # 3.执行SQL语句,获取结果集
    sql = "update xxx set 列=值 where 具体条件;"
    row_count = cur.execute(sql)
    print(f'操作的行数:{row_count}')
    # 4.操作结果集
    conn.commit()
    # 5 释放资源
    cursor.close()
    conn.close()
# 函数:删
def delete_data():
    # 1.获取连接对象
    conn = pymysql.connect(
        host = 'xxx.xxx.xxx.xxx',
        port = 3306,
        user = 'xxxx',
        password='xxxxxx',
        database='xxx',
        charset='utf8'
    )
    # 2.获取游标对象
    cur = conn.cursor()
    # 3.执行SQL语句,获取结果集
    sql = "delete from xxx where 具体条件;"
    row_count = cur.execute(sql)
    print(f'操作的行数:{row_count}')
    # 4.操作结果集
    conn.commit()
    # 5 释放资源
    cur.close()
    conn.close()
  • 今天内容到此结束,祝大家元旦快乐,龙年行大运!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值