当前位置:首页 > 问答库 > Python基础知识 > 详情

如何在Python中异步操作数据库?

来源:千锋教育

发布:syq

2022-10-13

Python基础知识 分类问答库

推荐答案

  Python 对操作数据库也提供了相应的异步支持。当我们做一个 Web 服务时,性能的瓶颈绝大部分都在数据库上,如果一个请求从数据库中读数据的时候能够自动切换、去处理其它请求的话,是不是就能提高并发量了呢。

如何在Python中异步操作数据库

  下面我们来看看如何使用 Python 异步操作 MySQL、PostgreSQL 以及 Redis,以上几个可以说是最常用的数据库了。至于 SQLServer、Oracle,本人没有找到相应的异步驱动,有兴趣可以自己去探索一下。

  而操作数据库无非就是增删改查,下面我们来看看如何异步实现它们。

  异步操作 MySQL

  异步操作 MySQL 的话,需要使用一个 aiomysql,直接 pip install aiomysql 即可。

  aiomysql 底层依赖于 pymysql,所以 aiomysql 并没有单独实现相应的连接驱动,而是在 pymysql 之上进行了封装。

  查询记录

  下面先来看看如何查询记录。

1

  怎么样,是不是很简单呢,和同步库的操作方式其实是类似的。但是很明显,我们在获取记录的时候不会只获取一条,而是会获取多条,获取多条的话使用 await result.fetchall() 即可。

2

  除了 fetchone、fetchall 之外,还有一个 fetchmany,可以获取指定记录的条数。

3

  以上就是通过 aiomysql 查询数据库中的记录,没什么难度。但是值得一提的是,await conn.execute 里面除了可以传递一个原生的 SQL 语句之外,我们还可以借助 SQLAlchemy。

4

  添加记录

  然后是添加记录,我们同样可以借助 SQLAlchemy 帮助我们拼接 SQL 语句。

5

  还是很方便的,但是插入多条记录的话只会返回插入的最后一条记录的信息,所以如果你希望获取每一条的信息,那么就一条一条插入。

  修改记录

  修改记录和添加记录是类似的,我们来看一下。

6

  可以看到,记录被成功的修改了。

  删除记录

  删除记录就更简单了,直接看代码。

7

  此时数据库中的记录已经全部被删除了。

  整体来看还是比较简单的,并且支持的功能也比较全面。

  异步操作 PostgreSQL

  异步操作 PostgreSQL 的话,我们有两个选择,一个是 asyncpg 库,另一个是 aiopg 库。asyncpg 是自己实现了一套连接驱动,而 aiopg 则是对 psycopg2 进行了封装,个人更推荐 asyncpg,性能和活跃度都比 aiopg 要好。

  下面来看看如何使用 asyncpg,首先是安装,直接 pip install asyncpg 即可。

  查询记录

  首先是查询记录。

8

  以上我们演示了如何使用 asyncpg 来获取数据库中的记录,我们看到执行 select 语句的话,我们可以使用 conn.fetchrow(query) 来获取满足条件的单条记录,conn.fetch(query) 来获取满足条件的所有记录。

  Record 对象

  我们说使用 conn.fetchone 查询得到的是一个 Record 对象,使用 conn.fetch 查询得到的是多个 Record 对象组成的列表,那么这个 Rcord 对象怎么用呢?

9

  当然我们也可以借助 SQLAlchemy 帮我们拼接 SQL 语句。

10

  此外,conn.fetch 里面还支持占位符,使用百分号加数字的方式,举个例子:

11

  还是推荐使用 SQLAlchemy 的方式,这样更加方便一些,就像 aiomysql 一样。但是对于 asyncpg 而言,实际上接收的是一个原生的 SQL 语句,是一个字符串,因此它不能像 aiomysql 一样自动识别 Select 对象,我们还需要手动将其转成字符串。而且这样还存在一个问题,至于是什么我们下面介绍添加记录的时候说。

  添加记录

  然后是添加记录,我们看看如何往库里面添加数据。

12

  通过 execute 可以插入单条记录,同时返回相关信息,但是说实话这个信息没什么太大用。除了 execute 之外,还有 executemany,用来执行多条插入语句。

13

  注意:如果是执行大量 insert 语句的话,那么 executemany 要比 execute 快很多,但是 executemany 不具备事务功。

更多问题在线答疑

导师线上坐镇
解答个性化学习难题

立即提问

上一篇

12类常用的Python函数

下一篇

10个Python脚本来自动化你的日常任务

相关问题

更多 >>
Python操作Excel数据的封装函数 90条简单实用的Python编程技巧 用Python算法预测客户行为案例 用Python读写操作Excel数据 12类常用的Python函数 如何在Python中异步操作数据库?
热门问题
Python基础知识 Python培训机构 Python培训费用 Python培训时间 Python培训课程 Python培训就业 零基础学Python Python薪资待遇 Python学习路线

全国咨询热线400-811-9990