首页 > Python基础教程 > Python数据库编程
阅读:3,556
Python(SQLite)fetchone()、fetchmany()和fetchall()用法
执行查询依然按照前面介绍的步骤进行,只是改为执行 select 语句。由于 select 语句执行完成后可以得到查询结果,因此程序可通过游标的 fetchone()、fetchmany(n)、fetchall() 来获取查询结果。正如它们的名字所暗示的,fetchone() 用于获取一条记录,fetchmany(n) 用于获取 n 条记录,fetchall() 用于获取全部记录。
如下程序示范了如何执行查询语句,并输出查询结果。
运行上面程序,可以看到如下运行结果:
由于每条 Select 语句都可能返回多个查询结果,因此不能使用 executemany() 执行查询语句,远没什么意义。
例如,可将上面程序中第 12~23 行代码改为如下形式:
一般来说,在程序中应该尽量避免使用 fetchall() 来获取查询返回的全部记录。这是因为程序可能并不清楚实际查询会返回多少条记录,如果查询返回的记录数量太多,那么调用 fetchall() 一次获取全部记录可能会导致内存开销过大,情况严重时可能导致系统崩溃。
如下程序示范了如何执行查询语句,并输出查询结果。
# 导入访问SQLite的模块 import sqlite3 # ①、打开或创建数据库 # 也可以使用特殊名:memory:代表创建内存中的数据库 conn = sqlite3.connect('first.db') # ②、获取游标 c = conn.cursor() # ③、调用执行select语句查询数据 c.execute('select * from user_tb where _id > ?', (2,)) print('查询返回的记录数:', c.rowcount) # 通过游标的description属性获取列信息 for col in (c.description): print(col[0], end='\t') print('\n--------------------------------') while True: # 获取一行记录,每行数据都是一个元组 row = c.fetchone() # 如果抓取的row为None,退出循环 if not row : break print(row) print(row[1] + '-->' + row[2]) # ④、关闭游标 c.close() # ⑤、关闭连接 conn.close()上面程序使用 execute() 方法执行了一条 select 语句,接下来程序使用循环,通过游标的 description 属性获取查询的列信息,也可以通过游标来获取查询结果,如上面程序所示。
运行上面程序,可以看到如下运行结果:
_id name pass gender
--------------------------------
(3, 'bai', '123456', 'female')
bai-->123456
(4, 'zhu', '123456', 'male')
zhu-->123456
(5, 'niu', '123456', 'male')
niu-->123456
(6, 'tang', '123456', 'male')
tang-->123456
由于每条 Select 语句都可能返回多个查询结果,因此不能使用 executemany() 执行查询语句,远没什么意义。
注意,不要试图使用executemany()方法执行select 语句,否则程序将会报错:ProgrammingError:executemany() can only execute DML statements。
上面程序使用 fetchone() 方法每次获取一条记录,这是比较常见的做法。实际上,程序也可以使用 fetchmany(n) 或 fetchall() 方法一次获取多条记录。例如,可将上面程序中第 12~23 行代码改为如下形式:
# 通过游标的description属性获取列信息 for col in (c.description): print(col[0], end='\t') print('\n--------------------------------') while True: # 每次抓取3条记录,该方法返回一个由3条记录组成的列表 rows = c.fetchmany(3) # 如果抓取的rows为None,退出循环 if not rows : break # 再次使用循环遍历获取的列表 for r in rows: print(r)上面程序使用 fetchmany(3) 每次获取 3 条记录,该方法返回由 3 条记录组成的列表,因此程序还需要遍历该列表才能取出每条记录。
一般来说,在程序中应该尽量避免使用 fetchall() 来获取查询返回的全部记录。这是因为程序可能并不清楚实际查询会返回多少条记录,如果查询返回的记录数量太多,那么调用 fetchall() 一次获取全部记录可能会导致内存开销过大,情况严重时可能导致系统崩溃。
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频