在第一季滚雪球学 python 中,我们已经接触了 python 操作 sqlite,本篇博客为你介绍 python 与 mysql 和 nosql 之间的故事。
在正式学习之前,先确保你电脑上已经安装了 mysql 。
mysql 的安装博客:补充知识:2021 年 mysql 最新 windows 安装教程,滚雪球学 python 第四季。
mysql 一些简单命令
对于 mysql 的细致学习,咱们应该单独开一个系列,这个 flag 先立下了,本文为了学习 python 操作 mysql 数据库,只能先做一些基本铺垫。
查看所有数据库
show databases;
查看帮助
help
退出 mysql
exit
创建数据库
create database cadb;
删除数据库
drop database cadb;
使用某个数据库
use cadb;
查看库表
show tables;
查看表结构
desc 表名;
除了上述内容外,你还要学习建表语句,删表语句,表中插入数据语句,表删除数据语句,表更新数据语句,这些稍后在 python 操作 mysql 中进行实现。
python 操作 mysql
操作数据库一般被程序员成为 CRUD 操作(增删改查),其中各个字符分别代表 C(Create)
新增,R(Read)
读取,U(Update)
更新,D(Delete)
删除。
在 python3 中推荐使用 pymysql
模块操作数据库,模块使用命令 pip install PyMySQL
进行安装。
在此之前,先通过 MySQL Command Line Client
创建一个表用来做测试。
新建库,新建表,插入数据 命令依次如下
show databases;
create database cadb;
use cadb;
-- 建表语句
create table user(name varchar(10),uid int,primary key(uid));
desc user;
接下来在表中插入 2 条数据。
insert into user(name,uid) values ("橡皮擦",1);
insert into user(name,uid) values ("CSDN",2);
简单的查询 sql 如下所示:
select * from user;
下面就可以在 python 中编写操作该库表的相关代码了,数据库链接步骤如下:
- 连接数据库,生成连接对象;
- 创建游标对象,用于访问数据表;
- 执行 sql 语句;
- 关闭游标;
- 关闭连接。
python 查询数据
python 连接数据库获取数据
import pymysql
# python 连接数据库,返回数据库连接对象
conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")
print(conn)
输出连接对象如下所示:
<pymysql.connections.Connection object at 0x00000000021E2F60>
其中 connect
方法相关的参数可以依据名称进行判断。
接下来就是创建游标,提取数据。
# 通过 cursor() 创建游标对象,并让查询结果以字典格式输出
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 输出 <pymysql.cursors.DictCursor object at 0x0000000002C03B00>
下一步使用游标对象 cur
的 execute
方法执行 sql
。
cur.execute("select * from user")
最后通过相关方法获取查询结果,本案例获取所有用户使用 fetchall
方法。
# 获取查询结果
data = cur.fetchall()
输入数据库检索的所有数据。
[{'name': '橡皮擦', 'uid': 1}, {'name': 'CSDN', 'uid': 2}]
关闭游标,关闭连接
# 关闭游标
cur.close()
# 关闭数据库连接
conn.close()
接下来我们将其修改的复杂一些,检索特定数据,例如 uid=1
的数据,并且用到上下文管理器 with 进行对象的关闭。
第一种写法
import pymysql
# python 连接数据库,返回数据库连接对象
conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")
# print(conn)
with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur:
cur.execute("select * from user where uid = %s", 1)
# 获取查询结果
data = cur.fetchall()
print(data)
# 关闭数据库连接
conn.close()
第二种写法
import pymysql
# python 连接数据库,返回数据库连接对象
conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")
# print(conn)
with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur:
cur.execute("select * from user where uid = %(uid)s", {"uid": 1})
# 获取查询结果
data = cur.fetchall()
print(data)
# 关闭数据库连接
conn.close()
两种写法,在 execute
方法参数存在差异,可直接对比学习。
python 更新数据表数据
接下来演示的是使用 python 去更新表数据,例如将 uid = 2
的 name
列更新为 Code
。
import pymysql
# python 连接数据库,返回数据库连接对象
conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")
# print(conn)
with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur:
try:
cur.execute("update user set name =%s where uid = %s", ["Code", 2])
conn.commit() # 提交事务
except Exception as e:
print("数据更新异常", e)
conn.rollback() # 数据回滚
# 关闭数据库连接
conn.close()
上述代码核心为在执行 SQL 操作之后,需要使用事务处理,即 conn.commit
提交事务,确保当前修改生效,如果出现异常,还需要使用 conn.rollback
对提交事务进行回滚。
cursor. execute
可以返回受影响行数,可以直接通过该值判断是否修改成功。
本次代码还使用了 try-except
语句,对于 PyMySQL 模块内置的异常类,清单如下:
- StandardError
- Warning
- Error
- InterfaceError
- DatabaseError
- DataError
- OperationalError
- IntegrityError
- ProgrammingError
- NotSupportedError
python 新增数据表数据
接下来演示增加数据,本次插入数据都采用硬编码,如果想创建一个自动递增的表字段,需要继续研究 sql 相关写法。
import pymysql
# python 连接数据库,返回数据库连接对象
conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")
# print(conn)
with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur:
try:
affected = cur.execute("insert into user(name,uid) values (%s,%s)", ["Good", 3])
conn.commit() # 提交事务
print("受影响行数", affected)
except Exception as e:
print("数据插入异常", e)
conn.rollback() # 数据回滚
# 关闭数据库连接
conn.close()
python 删除表格数据
核心代码如下所示:
affected = cur.execute("delete from user where uid = %s", [3])
conn.commit() # 提交事务
print("受影响行数", affected)
写到这里,你可以自行完成一个 python 简单的数据库操作封装。
python 操作 nosql 之 dbm
mysql 数据关系型数据库,与之对应的就是非关系型数据库,例如 python 内置的 dbm(database manager )
第一个要学习的方法是 dbm.open
,方法原型如下所示:
def open(file, flag='r', mode=0o666):
flag 参数:
r
: 只读;w
: 只写;n
: 总是创建一个数据库,打开方式为读写;c
: 存在不创建,不存在则创建。
关闭数据库使用 dbm.close()
,使用 with
语句之后,不需要手动释放资源。
with dbm.open(xxx) as db:
pass
dbm 存储的形式类似 python 字典,以键值对形式存在。
import dbm
with dbm.open('example.db', 'n') as db:
db['name'] = '橡皮擦' # 存储值
db['age'] = '18' # values must be bytes or strings
读取值使用 db[key]
即可,如果没有 key
值,提示 KeyError
错误。
import dbm
with dbm.open('example.db', 'r') as db:
ca = db["name"]
age = db["age"]
print(ca)
dbm
数据库保存的数据是字符串类型或者字节序列类型,读取到的值是字节序列类型,需要使用解码函数 decode
转换成字符串。
写在后面
以上内容就是本文的全部内容,希望对学习路上的你有所帮助~
今天是持续写作的第 230 / 365 天。
期待 关注,点赞、评论、收藏。
更多精彩
- 滚雪球学 Python(完结)
- 滚雪球学 Python 第二轮(完结)
- 滚雪球学 Python 第三轮
- 滚雪球学 Python 番外篇(完结)