当前位置:首页>python>Python连SQLite——派办事员去档案室(sqlite3)

Python连SQLite——派办事员去档案室(sqlite3)

  • 2026-10-14 07:35:59
Python连SQLite——派办事员去档案室(sqlite3)

作者:许灼灼

Python连SQLite——派办事员去档案室(sqlite3)

一、课堂故事

上节课,小婉在 Python 里用 SELECT 把王芳的成绩查出来了,开心得不行。可她回头一看代码:

「老师,我每查一次,都得先把 connect、cursor、execute 这一大串写一遍……这也太啰嗦了吧?而且我刚才插了条数据,一关程序再看,咋没了?」

老师笑了:「啰嗦是因为你还没把『连接数据库』这回事弄明白。至于数据没了——八成是你忘了『提交』。今天咱就把 Python 怎么连数据库,从头到尾捋一遍。」

小婉:「那 sqlite3 又是个啥?上节课代码第一行就 import 它了。」

老师:「问得好。sqlite3 就是派去档案室的『办事员』——Python 自带,不用装,专门负责帮你跑腿传话。」

二、概念解释

sqlite3 是 Python 内置的一个模块(标准库),专门用来操作 SQLite 数据库。它像个「档案室办事员」:

  • 你(Python 程序)是老板,坐在办公室里不下楼。
  • 数据库(.db 文件)在楼下档案室。
  • sqlite3 就是那个跑腿的办事员,你给它一句话(SQL 命令),它下楼帮你办。

用它的标准四步:

  1. connect()
    :建立连接。「喂,办事员,去『成绩.db』那个档案室报到。」
  2. cursor()
    :拿个「传话筒」(游标)。真正帮你传话的,是它。
  3. execute()
    :发命令。「去,把王芳的成绩翻出来。」
  4. close()
    :下班关门。「今天没事了,回去吧。」

记住一句话:connect 是连上,cursor 是干活,close 是收工。

三、拆开看

3.1 第一步:connect 建立连接

import sqlite3 conn = sqlite3.connect("成绩.db") 
  • import sqlite3
    :引入模块。注意它不用 pip 安装,Python 自带。
  • sqlite3.connect("成绩.db")
    :连上这个数据库文件。如果文件不存在,SQLite 会自动新建一个空的。
  • 返回的 conn 是个「连接对象」,代表你和数据库之间的这条线。

小婉问:「那如果我不小心写错文件名,连了个不存在的,会不会报错?」

老师:「不会报错,它会直接给你建一个新的空库——所以有时候你以为连上了老库,其实是新建了个空的,查出来啥也没有。文件名要写对。」

3.2 第二步:cursor 游标,真正干活的家伙

cur = conn.cursor() 
  • conn.cursor()
    :从连接里拿一个「游标」(cursor)。你可以理解成办事员手里那个记事本——你要它记着待会儿要办的事。
  • 后面所有的 execute() 都通过 cur 来发,不是 conn。

3.3 第三步:execute 发命令

查询(取数据):

cur.execute("SELECT 姓名, 语文 FROM 学生成绩表 WHERE 语文 > 80") rows = cur.fetchall()      # 把结果全部领回来 for row in rows:     print(row)             # 每行是一个元组 

写入(插数据):

cur.execute("INSERT INTO 学生成绩表 (姓名, 语文, 数学) VALUES ('赵敏', 88, 91)") conn.commit()              # ⚠️ 写入后必须提交! 

注意看两段的区别:查询完直接 fetchall() 拿结果;写入完多了一句 conn.commit()。

3.4 关键区分:什么时候要 commit?

这是今天最容易踩的坑:

  • 查询(SELECT)、建表(CREATE)
    :只读或只改结构,不用 commit。关掉就行。
  • 写入(INSERT、UPDATE、DELETE)
    :改了库里的「内容」,必须 conn.commit() 才算真正存进去。不提交 = 白干,关程序数据就没了(正是小婉刚才遇到的怪事)。

为什么?因为 SQLite 把「改动」先放在一边,等你喊「提交」才正式落盘。commit 就是那句「确认保存」。

3.5 第四步:close 收工

conn.close() 

用完数据库,记得 close() 关门。不关通常不会出大事,但好习惯要从小养成——尤其程序跑很久、开很多连接时,不关会占资源。

四、常见坑

坑 1:写入后忘了 commit,数据「消失」

最常见!INSERT 跑完不报错,但一关程序数据没了。记住:凡是改内容的操作,末尾都加 conn.commit()。

坑 2:在 conn 上直接 execute

conn.execute(...) 其实也能跑,但我们统一用 cur = conn.cursor() 然后 cur.execute(...)。新手混着写容易乱,建议固定用 cursor。

坑 3:fetchall 拿到的是「元组列表」

rows 长这样:[('王芳', 92), ('张三', 85)]。取第一列用 row[0],第二列 row[1]。别以为 row['姓名'] 能直接用(默认不行)。

坑 4:连接没关就又 connect 同个文件

虽然 SQLite 允许,但频繁开关、不关连接,容易出「数据库被锁定」的提示。用完就 close(),最稳妥。

坑 5:把 .db 文件路径写错,连成空库

connect("成绩.db") 路径不对时,它会默默新建空文件。你查出来啥也没有,还以为代码错了。确认文件名和位置对得上。

五、生活类比

把 Python 连数据库想象成老板派办事员去档案室:

  • import sqlite3
     = 公司招了个专门跑档案室的办事员(还不用付工资,Python 自带)。
  • connect("成绩.db")
     = 老板说:「去『成绩.db』那间档案室,报到!」办事员连上了门。
  • cursor()
     = 办事员掏出记事本,准备记待办。
  • execute("SELECT ...")
     = 老板在记事本上写:「去把王芳的成绩翻来。」
  • fetchall()
     = 办事员跑一趟,把翻到的档案全抱回来放桌上。
  • commit()
     = 如果老板让他「改了档案内容」,得补一句「确认存档」,改的才真生效。
  • close()
     = 下班,关门走人。

一句话记忆:connect 连门,cursor 记事本,execute 发话,commit 存档,close 关门。

六、练一练

1. 填空

Python 连 SQLite 要先 ______(建立连接),再 ______(拿游标),发命令用 ______,写完数据必须 ______,最后 ______。

2. 找错

下面这段代码哪里会出问题?改一改。

import sqlite3 conn = sqlite3.connect("成绩.db") cur = conn.cursor() cur.execute("INSERT INTO 学生成绩表 (姓名, 数学) VALUES ('李雷', 77)") print("插入成功") 

3. 想一想

为什么 SELECT 查询不需要 commit,而 INSERT 需要?用「档案室办事员」的类比解释一下。

下节课预告:连接、游标、commit 都搞定了,咱就能把前面学的 GradeManager(学生管理)真正接上数据库,做永久花名册了。综合实战,敬请期待!

最新文章

随机文章