標準查詢流程
import sqlite3 as db
with db.connect('mytest.db') as conn:
conn.row_factory = db.Row
cursor = conn.cursor()
cursor.execute('SELECT * FROM person')
for row in cursor.fetchall():
print(f"{row['name']} | {row['age']} | {row['address']}")
參數化查詢防注入
name = 'Tom'
cursor.execute('SELECT * FROM person WHERE name = ?', (name,))
# 或命名佔位符
cursor.execute('SELECT * FROM person WHERE name = :name', {'name': name})
常用查詢模式
| 需求 | SQL |
| 單行 | fetchone() |
| 所有行 | fetchall() |
| 迭代處理 | for row in cursor: |
| 聚合 | SELECT COUNT(*) FROM person |
| 分頁 | SELECT * FROM person LIMIT 10 OFFSET 20 |
上下文管理器優勢
- 自動
commit(無異常)或 rollback(有異常);
- 自動關閉連接,防止洩漏;
- 代碼更簡潔,異常安全。