Python SQLite3 保姆級教程:從零開始學數據庫操作
本文適合純新手!無需任何數據庫基礎,跟著步驟操作即可掌握 SQLite3 的核心用法。
目標:讓你像用記事本一樣輕松操作數據庫!
目錄
- 什么是 SQLite3?
- 環境準備
- 連接數據庫
- 創建表
- 增刪改查(CRUD)
- 事務與錯誤處理
- 高級技巧
- 常見問題
- 總結
1. 什么是 SQLite3?
SQLite3 是一個輕量級的 嵌入式數據庫,無需安裝獨立服務,所有數據存儲在一個文件中。
- ? 無需配置:像操作普通文件一樣使用。
- ? 跨平臺:數據庫文件可在 Windows/macOS/Linux 共享。
- ? 適合小型項目:APP 配置、本地緩存、小型網站等。
2. 環境準備
2.1 確認 Python 環境
確保已安裝 Python(建議 3.6+)。打開終端輸入以下命令:
python --version
若顯示版本號(如 Python 3.8.5
)則正常。若報錯,需先 安裝 Python。
2.2 導入 SQLite3 模塊
無需額外安裝!Python 自帶 sqlite3
庫,直接在代碼中導入:
import sqlite3
3. 連接數據庫
3.1 連接到磁盤數據庫(持久化)
# 連接到當前目錄下的 test.db 文件(不存在則自動創建)
conn = sqlite3.connect('test.db')
- ? 文件路徑規則:
'test.db'
:當前目錄下的test.db
文件。'/home/user/data.db'
:絕對路徑指定位置。
- ? 注意:關閉程序后文件依然存在,下次可重新連接。
3.2 連接到內存數據庫(臨時使用)
conn = sqlite3.connect(':memory:') # 程序關閉后數據消失
3.3 創建游標(操作數據庫的“手”)
cursor = conn.cursor() # 所有 SQL 操作通過游標執行
4. 創建表
4.1 基本語法
# 創建 users 表(如果不存在)
cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, # 自增主鍵name TEXT NOT NULL, # 文本類型,不能為空age INTEGER, # 整數類型email TEXT UNIQUE # 唯一約束(郵箱不可重復))
''')
conn.commit() # 提交事務(創建表需要提交)
4.2 字段類型
類型 | 說明 |
---|---|
INTEGER | 整數(如 1, -5, 100) |
TEXT | 字符串(如 “Hello”) |
REAL | 浮點數(如 3.14) |
BLOB | 二進制數據(如圖片) |
4.3 驗證表是否創建成功
# 查詢數據庫中所有表名
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
print(cursor.fetchall()) # 輸出:[('users',)]
5. 增刪改查(CRUD)
5.1 插入數據(Create)
插入單條數據
# 使用 ? 占位符避免 SQL 注入
cursor.execute('''INSERT INTO users (name, age, email)VALUES (?, ?, ?)
''', ('Alice', 30, 'alice@example.com'))
conn.commit() # 提交!
批量插入數據
users = [('Bob', 25, 'bob@example.com'),('Charlie', 35, 'charlie@example.com')
]
cursor.executemany('''INSERT INTO users (name, age, email) VALUES (?, ?, ?)
''', users)
conn.commit()
5.2 查詢數據(Read)
查詢所有記錄
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall() # 獲取全部結果
for row in rows:print(row) # 輸出:(1, 'Alice', 30, 'alice@example.com')
條件查詢
# 查找年齡大于 28 的用戶
cursor.execute('SELECT * FROM users WHERE age > ?', (28,))
results = cursor.fetchall()
for row in results:print(f"ID: {row[0]}, 姓名: {row[1]}, 年齡: {row[2]}")
查詢單條記錄
cursor.execute('SELECT * FROM users WHERE id = ?', (1,))
user = cursor.fetchone() # 只獲取第一條
print(user) # 輸出:(1, 'Alice', 30, 'alice@example.com')
5.3 更新數據(Update)
# 將 Alice 的郵箱更新為 new_email@example.com
cursor.execute('''UPDATE usersSET email = ?WHERE name = ?
''', ('new_email@example.com', 'Alice'))
conn.commit()
5.4 刪除數據(Delete)
# 刪除 ID 為 2 的用戶
cursor.execute('DELETE FROM users WHERE id = ?', (2,))
conn.commit()
6. 事務與錯誤處理
6.1 什么是事務?
- 事務:一組原子性的操作,要么全部成功,要么全部失敗。
- 示例:轉賬操作(A 扣款,B 加款必須同時成功)。
6.2 手動提交與回滾
try:cursor.execute("INSERT INTO users (name) VALUES ('David')")cursor.execute("INSERT INTO users (name) VALUES ('Eve')")conn.commit() # 成功則提交
except sqlite3.Error as e:print("出錯啦:", e)conn.rollback() # 失敗則回滾(撤銷所有操作)
6.3 自動提交(推薦)
使用 with
上下文管理器:
with sqlite3.connect('test.db') as conn:cursor = conn.cursor()cursor.execute("INSERT INTO users (name) VALUES ('Frank')")# 無需 commit,退出 with 塊時自動提交
7. 高級技巧
7.1 以字典形式返回結果
默認返回元組,可通過 row_factory
改為字典:
def dict_factory(cursor, row):return {col[0]: row[idx] for idx, col in enumerate(cursor.description)}conn.row_factory = dict_factory
cursor = conn.cursor()
cursor.execute('SELECT * FROM users WHERE id = 1')
print(cursor.fetchone()) # 輸出:{'id': 1, 'name': 'Alice', ...}
7.2 使用 SQLite 瀏覽器查看數據
推薦工具:DB Browser for SQLite
- 可視化查看表結構、數據。
- 直接執行 SQL 語句。
8. 常見問題
Q1:代碼運行后找不到數據庫文件?
- 檢查當前目錄:在代碼中添加:
import os print(os.getcwd()) # 查看文件實際保存路徑
- 使用絕對路徑:如
sqlite3.connect('/User/name/data.db')
Q2:插入數據后查詢不到?
- 忘記提交事務:確保執行
conn.commit()
。 - 查詢條件錯誤:檢查 WHERE 子句是否拼寫正確。
Q3:如何備份數據庫?
直接復制 .db
文件即可!SQLite 數據庫是單一文件。
9. 總結
通過本教程,你已經學會了:
- 連接數據庫(文件 vs 內存)
- 創建表(字段類型與約束)
- 增刪改查(參數化查詢防注入)
- 事務管理(提交與回滾)
- 高級技巧(字典結果、可視化工具)
下一步建議:
- 嘗試為本地的通訊錄、筆記應用添加數據庫支持。
- 學習更復雜的 SQL 語法(如 JOIN 查詢)。
遇到問題? 隨時查閱本文代碼示例,或使用 SQLite 瀏覽器調試!