Python(SQLite)fetchone、fetchmany和fetchall用法

广告位

执行查询依然按照前面介绍的步骤进行,只是改为执行 select 语句。由于 select 语句执行完成后可以得…

执行查询依然按照前面介绍的步骤进行,只是改为执行 select 语句。由于 select 语句执行完成后可以得到查询结果,因此程序可通过游标的 fetchone()、fetchmany(n)、fetchall() 来获取查询结果。正如它们的名字所暗示的,fetchone() 用于获取一条记录,fetchmany(n) 用于获取 n 条记录,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

从上面的运行结果来看,程序返回了所有 _id 大于 2 的记录,这就是上面程序查询所返回的结果。

由于每条 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() 一次获取全部记录可能会导致内存开销过大,情况严重时可能导致系统崩溃。

关于作者: Python基础入门教程

为您推荐

广告位

发表评论