2026-03-27 20:23:04
Python通过内置的sqlite3模块提供对SQLite数据库的完整支持,无需额外安装即可直接使用。以下是系统化的操作指南:
一、基础操作流程连接数据库使用sqlite3.connect()函数创建或连接数据库文件,返回连接对象:
import sqlite3conn = sqlite3.connect('example.db') # 文件不存在时自动创建创建游标对象游标用于执行SQL语句并管理结果集:
cursor = conn.cursor()执行SQL语句通过游标或连接对象直接执行SQL命令:
# 创建表cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')提交事务修改操作需显式提交才能生效:
conn.commit()关闭连接释放资源避免数据损坏:
conn.close()单条插入:
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 25)) # 使用参数化查询防SQL注入conn.commit()批量插入:使用executemany()提高效率:
users_data = [('Bob', 30), ('Charlie', 35)]cursor.executemany("INSERT INTO users (name, age) VALUES (?, ?)", users_data)conn.commit()获取所有结果:
cursor.execute("SELECT * FROM users")rows = cursor.fetchall() # 返回列表,每行是元组for row in rows: print(f"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}")逐行获取:
cursor.execute("SELECT * FROM users")for row in cursor: # 直接迭代游标对象 print(row)获取单条结果:
cursor.execute("SELECT * FROM users WHERE id=?", (1,))user = cursor.fetchone() # 返回单行元组或None上下文管理器自动处理连接和提交:
with sqlite3.connect('example.db') as conn: cursor = conn.cursor() cursor.execute("INSERT INTO users VALUES (NULL, 'David', 40)") # 无需显式commit(),退出with块时自动提交行工厂设置将查询结果转为字典格式:
def dict_factory(cursor, row): d = {} for idx, col in enumerate(cursor.description): d[col[0]] = row[idx] return dconn.row_factory = dict_factorycursor = conn.cursor()cursor.execute("SELECT * FROM users")print(cursor.fetchone()) # 输出: {'id': 1, 'name': 'Alice', 'age': 26}错误处理捕获数据库操作异常:
try: cursor.execute("INSERT INTO users VALUES (NULL, NULL, 'text')") # 违反age为INTEGER约束 conn.commit()except sqlite3.Error as e: print(f"数据库错误: {e}") conn.rollback() # 回滚事务批量操作时使用事务显式包裹事务可提升性能:
conn = sqlite3.connect('example.db')try: cursor = conn.cursor() cursor.execute("BEGIN TRANSACTION") for i in range(1000): cursor.execute("INSERT INTO users VALUES (?, ?, ?)", (i, f"Name_{i}", 20 + i%10)) conn.commit()except: conn.rollback() raisefinally: conn.close()索引优化为频繁查询的字段创建索引:
cursor.execute("CREATE INDEX IF NOT EXISTS idx_users_name ON users (name)")内存数据库临时测试可使用内存数据库:
conn = sqlite3.connect(':memory:') # 数据仅存在于内存通过以上方法,可高效完成SQLite数据库的增删改查操作。如需更复杂的功能(如JSON支持、全文检索),可参考SQLite官方文档扩展使用。