#概述
- 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()