在第一季滚雪球学 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 中编写操作该库表的相关代码了 数据库链接步骤如下
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 WarningError InterfaceErrorDatabaseError DataErrorOperationalErrorIntegrityErrorProgrammingErrorNotSupportedErrorpython 新增数据表数据
接下来演示增加数据 本次插入数据都采用硬编码 如果想创建一个自动递增的表字段 需要继续研究 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 之 dbmmysql 数据关系型数据库 与之对应的就是非关系型数据库 例如 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 番外篇 完结


