在 Python 中使用 fetchall() 从数据库中提取元素
本文旨在介绍使用 fetchall()
从数据库中提取元素的工作方法以及如何正确显示它们。本文还将讨论 list(cursor)
函数如何在程序中使用。
在 Python 中使用 fetchall()
从数据库文件中提取元素
该程序将与扩展名为 .db 的数据库文件建立安全 SQL 连接。建立连接后,程序将获取存储在该数据库表中的数据。
由于它是一个使用 fetchall()
提取元素的程序,因此将使用 for
循环提取和显示数据。
导入 Sqlite3 并与数据库建立连接
sqlite3 是 Python 中用于访问数据库的导入包。它是一个内置包;它不需要安装额外的软件即可使用,可以使用 import sqlite3
直接导入。
该程序在加载数据库时使用 try
块来测试错误,并在使用 exception
块建立连接时抛出错误消息。最后,程序关闭与 finally
块的连接。
但是,在了解如何使用 fetchall()
检索项目之前,首先必须了解 SQLite 是如何建立连接的。该程序声明了一个方法 allrowsfetched()
,在其中插入了 try
块并声明了一个变量 database_connecter
。
该变量将与数据库建立连接并加载其内容,如下面的代码片段所示。
import sqlite3
def allrowsfetched():
try:
database = sqlite3.connect("samplefile.db")
cursorfordatabase = database.cursor()
print("Connection is established")
except Exception as e:
print(e)
建立连接后,需要为数据库创建游标,这是一种帮助使用 Python 为 SQL 数据库执行命令的连接器。
在上面的程序中,游标是使用语法 database.cursor()
创建并存储在变量 cursorfordatabase
中的。如果上述所有步骤都正确执行,程序将打印一条成功消息。
为使用 fetchall()
方法创建游标对象
要使用 fetchall()
提取元素,我们必须确定数据库内容。程序中使用的数据库中存储了多个表。
该程序需要专门提取一个名为 employees
的表。它必须生成一个查询:
-
使用语法
SELECT * from table_name
生成查询。在程序中,查询是为了从数据库中找到一个名为employees
的表,它存储在变量query_for_sqlite
中。 -
生成查询后,
cursor.execute()
方法对数据库执行该查询。 -
最后,
cursor.fetchall()
语法使用fetchall()
提取元素,并将特定表加载到游标内并将数据存储在变量required_records
中。 -
变量
required_records
存储整个表本身,因此返回该变量的长度提供表内的行数。 -
使用
len(required_records)
语法打印行数。
query_for_sqlite = """SELECT * from employees"""
cursorfordatabase.execute(query_for_sqlite)
required_records = cursorfordatabase.fetchall()
print("Rows Present in the database: ", len(required_records))
使用 for
循环显示行元素
在使用 fetchall()
提取元素的步骤启动后,程序使用 for
循环来打印元素。for
循环运行的次数是行在变量 required_records
中出现的次数。
在此内部,使用行的索引打印各个元素。在这个数据库中,有 8 行(索引计数从 0 开始,到 7 结束)。
print("Data in an ordered list")
for row in required_records:
print("Id: ", row[0])
print("Last Name: ", row[1])
print("First Name ", row[2])
print("Title: ", row[3])
print("Reports to: ", row[4])
print("dob: ", row[5])
print("Hire-date: ", row[6])
print("Address: ", row[7])
print("\n")
处理异常
一旦实现了程序的目的,即使用 fetchall()
提取元素,则需要从内存中释放游标和连接变量中加载的数据。
-
首先,我们使用
cursor.close()
语法来释放游标变量cursorfordatabase
中存储的内存。 -
然后程序需要说明异常处理,即程序的
except
和finally
块,紧跟在try
块之后。 -
except
块用于 sqlite3 错误。因此,当未与数据库建立连接时,程序会显示错误消息,而不是在运行时崩溃。 -
finally
块最后执行,在执行两个块中的一个后,try
或except
。它关闭 SQLite 连接并打印相关消息。
finally
块的执行发生在最后,无论哪个块在它之前执行,为程序提供了一个关闭的姿态。
cursorfordatabase.close()
except sqlite3.Error as error:
print("Failed to read data from table", error)
finally:
if database:
database.close()
print("Connection closed")
用 Python 从数据库文件中提取元素的完整代码
下面提供了该程序的工作代码,以更好地理解这些概念。
import sqlite3
def allrowsfetched():
try:
database = sqlite3.connect("samplefile.db")
cursorfordatabase = database.cursor()
print("Connection established")
query_for_samplefile = """SELECT * from employees"""
cursorfordatabase.execute(query_for_samplefile)
required_records = cursorfordatabase.fetchall()
print("Rows Present in the database: ", len(required_records))
print("Data in an ordered list")
print(required_records)
for row in required_records:
print("Id: ", row[0])
print("Last Name: ", row[1])
print("First Name ", row[2])
print("Title: ", row[3])
print("Reports to: ", row[4])
print("dob: ", row[5])
print("Hired on: ", row[6])
print("Address: ", row[7])
print("\n")
cursorfordatabase.close()
except sqlite3.Error as error:
print("Failed to read data from table,", error)
finally:
if database:
database.close()
print("The Sqlite connection is closed")
allrowsfetched()
输出:当成功找到表时,
"C:/Users/Win 10/main.py"
Connection established
Rows Present in the database: 8
Data in an ordered list
Id: 1
Last Name: Adams
First Name Andrew
Title: General Manager
Reports to: None
Birthdate: 1962-02-18 00:00:00
Hire-date: 2002-08-14 00:00:00
Address: 11120 Jasper Ave NW
.
.
.
Connection closed
Process finished with exit code 0
输出:当所需的表不存在时,
"C:/Users/Win 10/main.py"
Connection established
Failed to read data from table, no such table: salary
Connection closed
Process finished with exit code 0
在这里,错误是通过使用表名 salary
作为查询创建的,例如 query_for_samplefile = """SELECT * from salary"""
。
在 Python 中使用 list(cursor)
作为从数据库中提取元素的替代方法
使用 fetchall()
提取元素的方法已经讨论到现在,尽管还有其他方法,例如 fetchone()
和 fetchmany()
。
我们也可以在不使用 fetch()
方法的情况下提取元素;相反,我们可以使用 list(cursor)
。这个过程就像 fetchall()
一样提取所有元素。
该方法节省了内存占用。与加载整个表的 fetchall()
不同,list(cursor)
运行一个循环,连续提取元素,然后从数据库中打印它们而不将它们存储在任何地方。
下面的代码让我们了解如何使用它。
所有步骤都类似于上面的程序,除了没有使用 fetchall()
初始化新变量来存储表。游标 cursorfordatabase
被放入 for
循环中,并打印该行。
由于游标对象仅存储查询,因此在内存占用中占用的空间最少甚至没有。
query_for_sqlite = """SELECT * from employees"""
cursorfordatabase.execute(query_for_sqlite)
for row in cursorfordatabase:
print("\n", row)
索引还可以获取有序列表,就像上一个程序一样。
for row in cursorfordatabase:
print("id:", row[0])
print("l_name:", row[1])
结论
本文重点展示如何在 Python 程序中使用 fetchall()
提取元素。你已经学习了诸如 cursor()
之类的概念和诸如 cursor.execute()
、sqlite3.connect
之类的语法函数,以及处理异常块。
你还了解了 list(cursor)
方法以及它如何成为从数据库中提取元素的替代方法。
相关文章
在 Python 中解析日志文件
发布时间:2023/12/20 浏览次数:180 分类:Python
-
了解如何在 Python 中解析日志文件。日志文件包含有关在软件系统或应用程序运行期间发生的事件的信息。这些事件包括错误、用户提出的请求、Bug 等。
在 Python 中声明一个没有值的变量
发布时间:2023/12/20 浏览次数:94 分类:Python
-
在本教程中,我们将讨论如何在 Python 中声明一个变量而不赋值。变量是保留的内存位置,可以存储一些值。换句话说,Python 程序中的变量将数据提供给计算机以处理操作。
在 Python 中定义类全局变量
发布时间:2023/12/20 浏览次数:77 分类:Python
-
本教程演示了如何定义类全局变量。全局变量是一个可见变量,可以在程序的每个部分使用。全局变量也不在任何函数或方法中定义。
在 Python 中的 Lambda 函数中传递多个参数
发布时间:2023/12/20 浏览次数:133 分类:Python
-
了解如何在 Python 中的 Lambda 函数中传递多个参数。lambda 形式或 lambda 表达式是 Python 中的匿名函数。它们是可以使用 Python 中保留的 lambda 关键字创建的内联函数。
在 Python 中导入 OpenSSL
发布时间:2023/12/20 浏览次数:147 分类:Python
-
本教程演示了如何在 Python 中使用 OpenSSL。我们旨在学习如何在 Python 中使用 OpenSSL。安装 OpenSSL Python 库
如何在 Python 中从路径获取文件名
发布时间:2023/12/20 浏览次数:74 分类:Python
-
本教程将演示 Python 中如何从路径中获取文件名,不论是什么操作环境下。使用 ntpath 库从路径中获取文件名 定义路径的方式可以是不同的。
在 Python 中获取绝对路径
发布时间:2023/12/20 浏览次数:94 分类:Python
-
它演示了如何在 Python 中获取一个文件的绝对路径。使用 abspath() 来获取 Python 中的绝对路径
在 Python 中获取父目录
发布时间:2023/12/20 浏览次数:166 分类:Python
-
本教程演示了如何在 Python 中获取一个路径的父目录。本教程将讲解在 Python 中获取一个路径的父目录的各种方法。父目录是指高于或高于给定目录或文件的目录。
在 Python 中从路径中获取目录
发布时间:2023/12/20 浏览次数:199 分类:Python
-
本教程演示如何在 Python 中提取文件路径的一部分。文件路径是表示文件在系统或目录中的位置的唯一字符串。有时,你可能必须从文件路径中检索或提取任何部分或块。