@概述

  • Python与MySQL数据库之间的交互,可以借助于第三方类库pymysql进行实现;
  • pymysql的安装:
pip3 install pymysql

@交互过程
pymysql与MySQL的交互过程可以概括为:

  • 配置和连接数据库;
  • 获取数据查询游标,以执行SQL语句;
  • 执行SQL语句,返回受影响的记录数;
  • 如果是查询,从游标中读取得到的结果;
  • 提交本次访问的结果;
  • 关闭数据库;
# 连接数据库
conn = pymysql.connect(

    # IP和端口
    host="127.0.0.1", port=3306,

    # 账号和密码
    user="root", password="123456",

    # 数据库和编码
    database="campus", charset="utf8"
)

# 获得数据库游标
cursor = conn.cursor()

# 执行插入,返回受影响的行数
affected = cursor.execute("insert into student(name,gender) values ('%s',%d)" % ('拍买色抠儿', -1))
print("插入结束,%d条记录受影响" % (affected))

# 执行查询,返回受影响的行数
affected = cursor.execute("select * from student")
print("查询到%d条记录" % (affected))

# 查询的结果被保存在游标中,拿取全部结果
ret = cursor.fetchall()
print(type(ret), ret)  # 类型是二维元组

# 提交当前事务到数据库,不提交等于啥也没干
conn.commit()
print("修改已提交")

# 断开数据库连接
conn.close()

注意事项:在写SQL语句时,字符串类型的值必须【显式地】包裹在引号内,这是SQL的语法!

@数据库事务

  • 当我们对数据库进行批量操作时,这一系列操作往往是一个有机整体;
  • 因此这一系列操作,应该要么全部成功,要么全部回滚到访问前的状态,否则就容易形成脏数据;
  • 举个例子,一次网购交易的成功提交,要修改商家出货表、用户订单表、转账信息表、物流信息表等等,所有环节都必须严丝合缝,发生任何异常交易都不应成功,一切数据应回滚到交易发生前的状态;
  • 这种要么全部成功、要么全部失败且数据回滚的批量数据操作,就称为一次事务(Transaction);
  • 一次事务(批量数据操作)的结果只有两种:①全部成功并提交,②发生异常并回滚;
# 连接数据库
conn = pymysql.connect(
    host="127.0.0.1", port=3306,
    user="root", password="123456",
    database="campus", charset="utf8"
)

try:
    # 获得数据库游标
    cursor = conn.cursor()

    # 执行修改,返回受影响的行数
    affected = cursor.execute("update student set name='%s' where name='%s'" % ("韩三平", "张三丰"))
    print("修改结束,%d条记录受影响" % (affected))

    # 执行删除,返回受影响的行数
    affected = cursor.execute("delete from student where gender < 0")
    print("删除结束,%d条记录受影响" % (affected))

    # 提交当前事务到数据库,不提交等于啥也没干
    conn.commit()
    print("事务已提交")

except Exception as e:

    # 发生异常时回滚到整个事务开始之前的状态
    conn.rollback()
    print(e, "数据已回滚")

# 断开数据库连接
conn.close()