练习题:36

目录

Python题目

题目

题目分析

SQLite 数据库特点考虑

Python 连接方式分析

连接流程步骤:

代码实现

代码解释

1. 导入模块与连接数据库

2. 创建游标对象

3. 创建表操作

4. 插入数据操作

5. 查询数据操作

6. 更新数据操作

7. 删除数据操作

8. 关闭游标和连接

运行思路

1. 导入模块与连接数据库阶段

2. 创建游标对象阶段

3. 创建表操作阶段

4. 插入数据操作阶段

5. 查询数据操作阶段

6. 更新数据操作阶段

7. 删除数据操作阶段

8. 关闭游标和连接阶段

结束语

Python题目

题目

Python怎么样连接Sqlite数据库?

题目分析

  • SQLite 数据库特点考虑

    • 轻量级特性:SQLite 是一个轻量级的嵌入式数据库,它不需要独立的服务器进程,数据库以文件形式存在。这使得它在一些小型项目、本地数据存储场景或者对资源占用要求较低的应用中非常适用。例如,在一个简单的桌面应用程序中,用于存储用户的配置信息、小型任务列表等。理解这一特点有助于明白为什么在某些场景下选择连接 SQLite 数据库。
    • 跨平台兼容性:SQLite 数据库文件可以在多种操作系统(如 Windows、Linux、macOS 等)上使用,Python 连接 SQLite 数据库的方式在不同平台上基本相同,这为开发跨平台应用提供了便利。在开发过程中,无需考虑因操作系统差异而导致数据库连接方式的巨大变化。
  • Python 连接方式分析

    • 内置模块支持:Python 标准库中自带了sqlite3模块,用于操作 SQLite 数据库。这意味着不需要额外安装其他第三方库就可以进行基本的数据库连接和操作。这降低了开发成本和复杂性,并且由于是标准库的一部分,其稳定性和兼容性有一定的保障。
    • 连接流程步骤
      • 创建连接对象:首先需要使用sqlite3.connect()函数创建一个连接对象,这个函数的参数是 SQLite 数据库文件的路径(如果文件不存在,会自动创建一个新的数据库文件)。例如,conn = sqlite3.connect('example.db')会尝试连接名为example.db的数据库文件。
      • 创建游标对象:在建立连接后,通过连接对象的cursor()方法创建游标对象,游标用于执行 SQL 语句并处理结果。就像在使用其他数据库(如 MySQL)时一样,游标在 SQLite 数据库操作中起到了关键的中间媒介作用。
      • 执行 SQL 语句:使用游标对象的execute()方法来执行 SQL 语句,包括创建表、插入数据、查询数据、更新数据和删除数据等操作。例如,cursor.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)")可以创建一个名为users的表。
      • 提交和关闭操作:对于数据修改操作(如插入、更新、删除),需要调用连接对象的commit()方法来提交事务,使修改生效。最后,要关闭游标对象和连接对象,释放资源,以避免资源泄漏和潜在的错误。

代码实现

import sqlite3

# 连接到SQLite数据库(如果不存在则创建新的数据库文件)
conn = sqlite3.connect('example.db')
# 创建游标对象
cursor = conn.cursor()

### 1. 创建表操作
create_table_sql = "CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)"
cursor.execute(create_table_sql)
conn.commit()  # 提交事务,使表创建生效(虽然这里一般不需要,但养成好习惯)

### 2. 插入数据操作
insert_data_sql = "INSERT INTO students (name, age) VALUES (?,?)"
student_data = [("张三", 20), ("李四", 22), ("王五", 21)]
cursor.executemany(insert_data_sql, student_data)
conn.commit()  # 提交事务,使插入数据生效

### 3. 查询数据操作
query_data_sql = "SELECT * FROM students"
cursor.execute(query_data_sql)
results = cursor.fetchall()
print("查询到的学生信息:")
for row in results:
    print(row)

### 4. 更新数据操作
update_data_sql = "UPDATE students SET age =? WHERE name =?"
update_data = (23, "张三")
cursor.execute(update_data_sql, update_data)
conn.commit()  # 提交事务,使更新生效

### 5. 删除数据操作
delete_data_sql = "DELETE FROM students WHERE name =?"
delete_data = ("李四",)
cursor.execute(delete_data_sql, delete_data)
conn.commit()  # 提交事务,使删除生效

# 关闭游标和连接,释放资源
cursor.close()
conn.close()

代码解释

1. 导入模块与连接数据库

import sqlite3

conn = sqlite3.connect('example.db')
  • 导入模块
    首先使用 import sqlite3 语句导入 Python 标准库中的 sqlite3 模块,该模块提供了操作 SQLite 数据库所需的各种函数和类等资源,是后续能够连接并操作数据库的基础。
  • 连接数据库
    接着调用 sqlite3.connect('example.db') 函数来建立与 SQLite 数据库的连接。这里的参数 'example.db' 是要连接的数据库文件的路径及文件名,如果该文件不存在,Python 会自动创建一个新的 SQLite 数据库文件(以 .db 为扩展名)。函数执行成功后,会返回一个 conn 对象,代表与数据库的连接,后续所有对数据库的操作都要通过这个连接对象来进行。

2. 创建游标对象

cursor = conn.cursor()

通过调用连接对象 conn 的 cursor() 方法创建游标对象 cursor。游标对象在数据库操作中扮演着重要角色,它相当于一个操作数据库的 “中间人”,可以使用它来执行具体的 SQL 语句,并获取这些语句执行后的结果,比如查询操作返回的数据等。

3. 创建表操作

create_table_sql = "CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)"
cursor.execute(create_table_sql)
conn.commit()
  • 构建创建表语句
    定义 create_table_sql 变量并赋值为创建表的 SQL 语句 CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)。其中 CREATE TABLE 是创建表的关键字,IF NOT EXISTS 表示如果同名表不存在才创建(避免重复创建导致错误),students 是表名,括号内定义了表的列结构,id 列是整数类型且设置为主键(PRIMARY KEY),并使用 AUTOINCREMENT 让其自动递增(方便为每条记录生成唯一标识),name 列是文本类型(TEXT),age 列是整数类型(INTEGER)。
  • 执行创建表语句
    调用游标对象 cursor 的 execute() 方法,将创建表的 create_table_sql 语句作为参数传入,游标会将这个语句传递给关联的 SQLite 数据库,数据库执行该语句尝试创建对应的表结构。虽然对于创建表操作,在很多情况下即使不调用 conn.commit() 也能生效,但养成良好习惯,在执行完创建表等修改数据库结构的操作后,调用 conn.commit() 提交事务,确保表结构的更改被正确保存到数据库中。

4. 插入数据操作

insert_data_sql = "INSERT INTO students (name, age) VALUES (?,?)"
student_data = [("张三", 20), ("李四", 22), ("王五", 21)]
cursor.executemany(insert_data_sql, student_data)
conn.commit()
  • 构建插入语句与准备数据
    定义 insert_data_sql 变量并赋值为插入数据的 SQL 语句 INSERT INTO students (name, age) VALUES (?,?),这里使用 ? 作为占位符来表示要插入的数据位置,这种参数化的方式能有效防止 SQL 注入攻击并且方便传入动态数据。然后定义 student_data 列表,其中每个元素是一个包含要插入的 name 和 age 值的元组,例如 ("张三", 20) 表示要插入一条 name 为 张三age 为 20 的学生记录,这里准备了多条数据,方便批量插入。
  • 执行插入操作并提交事务
    调用游标对象 cursor 的 executemany() 方法,将插入语句 insert_data_sql 和数据列表 student_data 作为参数传入,该方法会循环执行插入语句,将列表中的每组数据依次插入到数据库的 students 表中。由于插入操作是对数据库的数据进行修改,所以需要调用 conn.commit() 提交事务,使插入的数据真正生效并持久化存储到数据库中,否则数据只是在事务缓存区中,并不会实际写入数据库,后续若出现异常等情况可能导致数据丢失。

5. 查询数据操作

query_data_sql = "SELECT * FROM students"
cursor.execute(query_data_sql)
results = cursor.fetchall()
print("查询到的学生信息:")
for row in results:
    print(row)
  • 构建查询语句
    定义 query_data_sql 变量并赋值为查询语句 SELECT * FROM students,表示从 students 表中查询所有列(* 代表所有列)的所有记录。
  • 执行查询操作并获取结果
    调用游标对象 cursor 的 execute() 方法,将查询语句 query_data_sql 作为参数传入,游标将语句传递给数据库,数据库执行查询操作并返回结果集。接着调用 cursor.fetchall() 方法获取查询结果集中的所有数据,它会返回一个包含所有记录的列表,每条记录以元组形式呈现,元组中的元素对应查询语句中选择列的值,将这个结果列表赋值给 results 变量。
  • 处理查询结果
    通过 for 循环遍历 results 列表,每次循环将一条记录(以元组形式)赋值给变量 row,然后使用 print(row) 语句将每条记录输出到控制台,这里只是简单打印,你也可以根据实际需求对查询结果进行更复杂的处理,比如提取特定列的值用于后续业务逻辑等。

6. 更新数据操作

update_data_sql = "UPDATE students SET age =? WHERE name =?"
update_data = (23, "张三")
cursor.execute(update_data_sql, update_data)
conn.commit()
  • 构建更新语句与准备数据
    定义 update_data_sql 变量并赋值为更新数据的 SQL 语句 UPDATE students SET age =? WHERE name =?,其中 SET age =? 表示要更新的列和对应的占位符,WHERE name =? 用于设置更新的条件,通过这种参数化方式可以灵活地指定要更新的具体数据和更新的目标记录。接着定义 update_data 元组,其元素按照 update_data_sql 语句中占位符的顺序对应要更新的 age 值和要匹配的 name 值,这里设定为将 name 为 张三 的学生的 age 更新为 23,你可以根据实际需求修改这些值。
  • 执行更新操作并提交事务
    调用游标对象 cursor 的 execute() 方法,将更新语句 update_data_sql 和更新数据 update_data 作为参数传入,游标会将这些信息传递给数据库,数据库根据语句要求对符合条件(name 为 张三)的记录的 age 列进行更新操作,将其值修改为 23。同样,因为更新操作涉及数据修改,需要调用 conn.commit() 提交事务,使更新后的结果生效并将修改后的数据持久化存储到数据库中,确保数据库中的数据按照更新要求发生了改变。

7. 删除数据操作

delete_data_sql = "DELETE FROM students WHERE name =?"
delete_data = ("李四",)
cursor.execute(delete_data_sql, delete_data)
conn.commit()
  • 构建删除语句与准备数据
    定义 delete_data_sql 变量并赋值为删除数据的 SQL 语句 DELETE FROM students WHERE name =?,通过 WHERE name =? 设置了删除的条件,即根据学生的 name 来确定要删除哪些记录,这里使用占位符 ? 方便传入动态的删除条件。然后定义 delete_data 元组,其中包含要删除的学生的 name 值,这里设定为 ("李四",),注意即使只有一个元素,也要以元组形式传递,以匹配占位符的要求,你可以根据实际需求修改这个值。
  • 执行删除操作并提交事务
    调用游标对象 cursor 的 execute() 方法,将删除语句 delete_data_sql 和删除数据 delete_data 作为参数传入,游标会将这些信息传递给数据库,数据库根据语句要求将 students 表中 name 为 李四 的学生记录从数据库中删除。由于删除操作也是对数据库数据的修改,需要调用 conn.commit() 提交事务,使删除操作生效,确保记录真正从数据库中被删除,维护数据库数据的一致性。

8. 关闭游标和连接

cursor.close()
conn.close()

在完成所有对数据库的操作后,为了释放资源并确保数据库连接的正常关闭,需要依次关闭游标对象和数据库连接对象。先调用 cursor.close() 关闭游标,释放游标占用的相关资源,并通知数据库游标使用完毕;然后调用 conn.close() 关闭数据库连接,释放与之相关的所有系统资源,避免资源浪费以及可能出现的数据库连接相关的潜在问题。

运行思路

1. 导入模块与连接数据库阶段

import sqlite3

conn = sqlite3.connect('example.db')
  • 导入模块
    当 Python 解释器执行到 import sqlite3 语句时,会在 Python 的模块搜索路径中查找名为 sqlite3 的模块(因为它是 Python 标准库的一部分,所以通常能顺利找到),找到后将其加载到内存中,使得后续代码可以调用该模块内定义的各种函数、类等资源,这是后续能够连接并操作 SQLite 数据库的基础前提。若找不到此模块,会抛出 ModuleNotFoundError 异常,导致程序无法继续正常运行。
  • 连接数据库
    执行 conn = sqlite3.connect('example.db') 语句时,Python 解释器调用 sqlite3 模块中的 connect 函数,尝试建立与 SQLite 数据库的连接。函数会根据传入的参数 'example.db'(代表数据库文件的路径及文件名)来进行操作:
    • 如果指定路径下不存在名为 example.db 的文件,connect 函数会自动创建一个新的 SQLite 数据库文件(以 .db 为扩展名),这个新创建的数据库初始是空白的,没有任何表结构和数据。
    • 如果文件存在,函数会打开该文件对应的数据库,准备后续的操作。无论文件是否存在,若成功建立连接,connect 函数会返回一个代表该连接的 conn 对象,后续所有对数据库的操作都将基于这个对象来展开,比如执行 SQL 语句、提交事务等操作都需要通过它来进行交互。

2. 创建游标对象阶段

cursor = conn.cursor()

执行此语句时,Python 解释器调用连接对象 conn 的 cursor() 方法来创建游标对象,并将其赋值给变量 cursor。游标对象在整个数据库操作流程中扮演着类似 “中间人” 或者 “操作指针” 的角色,它是后续执行具体 SQL 语句以及获取、处理这些语句执行结果的关键工具。例如,后续无论是要创建表、插入数据、查询数据还是进行更新、删除操作,都需要借助游标对象的相应方法来向数据库传达指令并获取反馈信息。

3. 创建表操作阶段

create_table_sql = "CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)"
cursor.execute(create_table_sql)
conn.commit()
  • 构建创建表语句
    执行到 create_table_sql = "CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)" 语句时,Python 解释器在内存中创建一个字符串对象,其内容就是指定的创建表的 SQL 语句。在这个语句中:
    • CREATE TABLE 是 SQL 语法中用于创建表的关键字,表示接下来要定义一个新表的结构。
    • IF NOT EXISTS 是一个条件判断修饰语,它的作用是告知数据库,如果名为 students 的表在当前数据库中不存在,才执行创建操作,这样可以避免因重复创建同名表而导致的错误(比如表已存在时再次创建会报错)。
    • students 明确了要创建的表的名称。
    • 括号内的部分 (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER) 用于定义表的列结构,其中 id 列被定义为整数类型(INTEGER),同时它被设置为主键(PRIMARY KEY),并且添加了 AUTOINCREMENT 属性,意味着这个列的值会自动递增,通常用于为每条记录生成唯一的标识符;name 列被定义为文本类型(TEXT),用于存储学生的姓名信息;age 列被定义为整数类型(INTEGER),用于存储学生的年龄信息。
  • 执行创建表语句
    执行 cursor.execute(create_table_sql) 语句时,Python 解释器调用游标对象 cursor 的 execute 方法,将创建表的 create_table_sql 语句作为参数传入。游标对象内部会把这个 SQL 语句传递给与之关联的 SQLite 数据库,数据库接收到这个创建表的请求后,会按照语句中定义的表名和列结构等要求,尝试在数据库中创建对应的表结构。
  • 提交事务(尽管此处非必需但为养成习惯)
    执行 conn.commit() 语句时,Python 解释器调用连接对象 conn 的 commit 方法,虽然对于创建表这样的操作,在很多情况下即使不调用此方法,表结构也能成功创建到数据库中,但为了遵循良好的数据库操作规范以及确保在一些复杂的事务场景下数据的一致性,养成提交事务的习惯是很有必要的。此操作会将创建表这个操作在数据库层面进行最终确认,使表结构的更改真正生效并持久化存储到数据库中,避免后续可能出现的数据不一致或丢失等问题。

4. 插入数据操作阶段

insert_data_sql = "INSERT INTO students (name, age) VALUES (?,?)"
student_data = [("张三", 20), ("李四", 22), ("王五", 21)]
cursor.executemany(insert_data_sql, student_data)
conn.commit()
  • 构建插入语句与准备数据
    执行到 insert_data_sql = "INSERT INTO students (name, age) VALUES (?,?)" 语句时,Python 解释器在内存中创建一个字符串对象,其内容为插入数据的 SQL 语句。这里使用 ? 作为占位符,用于表示后续要插入的具体数据位置,这种参数化的方式有两个重要作用:一是能有效防止 SQL 注入攻击,确保数据的安全性;二是方便动态传入不同的数据值,增加了代码的灵活性。
    接着执行 student_data = [("张三", 20), ("李四", 22), ("王五", 21)] 语句,Python 解释器创建一个列表对象,列表中的每个元素都是一个元组,每个元组对应一组要插入的数据,例如 ("张三", 20) 表示要插入一条学生记录,其中 name 字段的值为 张三age 字段的值为 20。这里准备了多条数据,是为了方便后续进行批量插入操作。
  • 执行插入操作并提交事务
    执行 cursor.executemany(insert_data_sql, student_data) 语句时,Python 解释器调用游标对象 cursor 的 executemany 方法,将插入语句 insert_data_sql 和数据列表 student_data 作为参数传入。游标对象内部会循环处理数据列表,针对列表中的每一组数据,将其对应的值按照占位符的顺序绑定到插入语句中,然后将完整的插入语句依次传递给 SQLite 数据库。数据库接收到这些插入请求后,会按照语句要求将每组数据作为一条新记录插入到 students 表中对应的列中。不过,此时插入的数据只是暂时存放在数据库的事务缓存区中,并没有真正写入到数据库的物理存储中,相当于处于一种 “待确认” 状态。
    随后执行 conn.commit() 语句,Python 解释器调用连接对象 conn 的 commit 方法,将事务缓存区中的插入数据操作进行提交,使其真正生效并持久化存储到数据库中。只有经过这一步,之前插入的数据才会被完整地保存到数据库的 students 表中,成为实际存储的数据内容。若缺少这一步,在后续程序出现异常(比如突然崩溃、网络问题等)或者关闭数据库连接的情况下,事务缓存区中的数据就会丢失,无法完成预期的插入操作。

5. 查询数据操作阶段

query_data_sql = "SELECT * FROM students"
cursor.execute(query_data_sql)
results = cursor.fetchall()
print("查询到的学生信息:")
for row in results:
    print(row)
  • 构建查询语句
    执行到 query_data_sql = "SELECT * FROM students" 语句时,Python 解释器在内存中创建一个字符串对象,其内容为查询数据的 SQL 语句。这里的 SELECT * 表示要从 students 表中查询所有列的数据,FROM students 则明确了要从哪个表进行查询,整体语句就是要获取 students 表中的所有记录信息。
  • 执行查询操作并获取结果
    执行 cursor.execute(query_data_sql) 语句时,Python 解释器调用游标对象 cursor 的 execute 方法,将查询语句 query_data_sql 作为参数传入。游标对象内部会把这个查询语句传递给 SQLite 数据库,数据库接收到查询请求后,会按照语句要求对 students 表进行检索操作,查找所有符合条件(这里就是所有记录)的数据,并将这些数据整理成一个结果集准备返回。
    接着执行 results = cursor.fetchall() 语句,Python 解释器调用游标对象 cursor 的 fetchall 方法,向数据库请求获取查询结果集中的所有记录。数据库将整理好的包含所有符合条件记录的结果集(以元组列表形式返回,每个元组对应一条记录,元组中的元素对应查询语句中选择列的值)传递给游标对象,再由游标对象赋值给变量 results,以便后续在 Python 程序中对这些查询结果进行处理。
  • 处理查询结果
    进入 for row in results: 循环,Python 解释器会依次取出 results 列表中的每个元组元素(即每条记录),赋值给变量 row,在每次循环中执行 print(row) 语句,将当前记录(以元组形式)输出到控制台。当然,这里只是简单地打印查询结果,在实际应用中,你可以根据具体的业务需求对查询到的每行数据进行更复杂的处理,比如提取特定列的值用于后续的计算、判断或者展示等操作。

6. 更新数据操作阶段

update_data_sql = "UPDATE students SET age =? WHERE name =?"
update_data = (23, "张三")
cursor.execute(update_data_sql, update_data)
conn.commit()
  • 构建更新语句与准备数据
    执行到 update_data_sql = "UPDATE students SET age =? WHERE name =?" 语句时,Python 解释器在内存中创建一个字符串对象,其内容为更新数据的 SQL 语句。在这个语句中,UPDATE students 表示要对 students 表进行更新操作,SET age =? 明确了要更新的列是 age 列,并且使用 ? 作为占位符来表示待更新的具体数值,WHERE name =? 则是设置了更新的条件,即通过 name 字段的值来确定要更新哪条记录的 age 列,整体语句就是要将 students 表中满足特定 name 条件的记录的 age 列更新为指定的值。
    接着执行 update_data = (23, "张三") 语句,Python 解释器创建一个元组对象,用于存放要更新的数据,且元组中的元素顺序与 update_data_sql 语句中占位符的顺序对应,这里第一个元素 23 对应要更新的 age 值,第二个元素 "张三" 对应要匹配的 name 值,也就是表示要将 students 表中 name 为 张三 的学生记录的 age 列更新为 23,你可以根据实际需求修改这些值来实现不同的更新操作。
  • 执行更新操作并提交事务
    执行 cursor.execute(update_data_sql, update_data) 语句时,Python 解释器调用游标对象 cursor 的 execute 方法,将更新语句 update_data_sql 和更新数据 update_data 作为参数传入。游标对象内部会把这些信息传递给 SQLite 数据库,数据库接收到更新请求后,会识别语句中的占位符,并将元组中的参数值按照顺序绑定到对应的位置,然后根据完整的更新条件对 students 表进行筛选,找到符合条件(name 为 张三)的记录,在事务缓存区中对这些记录的 age 列进行相应的修改操作,将其值更新为 23。但此时,这些修改只是暂存在事务缓存区中,还未真正应用到数据库的实际存储数据中,同样处于一种 “待确认” 状态。
    随后执行 conn.commit() 语句,Python 解释器调用连接对象 conn 的 commit 方法,将事务缓存区中针对学生年龄的更新操作进行提交,使其修改结果真正生效并持久化存储到数据库中,确保数据库中对应学生记录的 age 列的值按照更新操作的要求发生了实际改变,保证了数据的一致性和准确性。

7. 删除数据操作阶段

delete_data_sql = "DELETE FROM students WHERE name =?"
delete_data = ("李四",)
cursor.execute(delete_data_sql, delete_data)
conn.commit()
  • 构建删除语句与准备数据
    执行到 delete_data_sql = "DELETE FROM students WHERE name =?" 语句时,Python 解释器在内存中创建一个字符串对象,其内容为删除数据的 SQL 语句。通过 WHERE name =? 设置了删除的条件,即依据学生的 name 字段的值来确定要删除哪些记录,整体语句就是要从 students 表中删除满足指定 name 条件的学生记录,这里使用占位符 ? 方便动态传入要删除的学生姓名,增加了操作的灵活性。
    接着执行 delete_data = ("李四",) 语句,Python 解释器创建一个元组对象,其中包含要删除的学生的 name 值,这里设定为 "李四",注意即使只有一个元素,也要以元组形式传递,这样才能与删除语句中的占位符正确匹配,你可以根据实际情况修改这个值来指定要删除的不同学生记录。
  • 执行删除操作并提交事务
    执行 cursor.execute(delete_data_sql, delete_data) 语句时,Python 解释器调用游标对象 cursor 的 execute 方法,将删除语句 delete_data_sql 和删除数据 delete_data 作为参数传入。游标对象内部会把这些信息传递给 SQLite 数据库,数据库接收到删除请求后,会根据语句中的条件筛选出符合要求(name 为 李四)的学生记录,然后在事务缓存区中将这些记录标记为待删除状态,此时这些记录还未从数据库的物理存储中真正删除,同样处于 “待确认” 状态。
    随后执行 conn.commit() 语句,Python 解释器调用连接对象 conn 的 commit 方法,将事务缓存区中针对学生记录的删除操作进行提交,使其真正生效,确保符合条件(name 为 李四)的学生记录被从数据库的物理存储中永久性地删除,维护了数据库数据的一致性。

8. 关闭游标和连接阶段

cursor.close()
conn.close()
  • 关闭游标
    完成所有对数据库的操作后,执行 cursor.close() 语句,Python 解释器调用游标对象 cursor 的关闭方法,释放游标对象占用的相关资源,并通知数据库服务器游标使用完毕,进行内部清理操作,确保游标相关资源被正确回收,避免资源浪费以及可能出现的与游标相关的潜在问题(比如游标未关闭可能导致后续数据库连接出现异常等)。
  • 关闭连接
    接着执行 conn.close() 语句,Python 解释器调用连接对象 conn 的关闭方法,与数据库服务器交互告知连接即将关闭,释放与之相关的所有系统资源,完成数据库连接的正常关闭流程,保障数据库连接资源合理使用及系统稳定运行,避免因未关闭连接而导致的资源泄漏等问题。

结束语

希望以上对 “Python 怎么样连接 Sqlite 数据库” 这一问题全面且细致的讲解,涵盖题目分析、代码实现以及运行思路剖析,能让你顺利掌握在 Python 环境下与 SQLite 数据库交互的方法和要点。SQLite 数据库以其轻量级、便捷的优势,在诸多小型项目以及本地数据存储场景中都能大显身手,而 Python 与之配合更是相得益彰,助你轻松应对各类数据管理需求。

在今后的编程实践中,无论是开发简单的桌面工具,还是构建小型的本地数据应用,相信你都能凭借对这部分知识的扎实理解,灵活运用相关技术,高效地实现数据的存储、查询、更新与删除等操作。倘若后续遇到与之相关的疑问或者新的挑战,随时可以回顾这些内容,或者向我进一步咨询探讨。祝愿你在编程的道路上不断探索,收获更多的知识与成果,创作出更出色的作品!

你可能感兴趣的:(练习,oracle,数据库)