好的,我们可以整理一份关于 Python 的 sqlite3 数据库使用指南,涵盖基本操作、常用方法、注意事项和实战示例。


Python sqlite3 数据库使用指南

SQLite 是一个轻量级的关系型数据库,无需单独安装数据库服务器,数据库以文件形式存在,非常适合小型项目、嵌入式应用和快速原型开发。Python 内置 sqlite3 模块,可以直接操作 SQLite 数据库。


一、连接数据库

import sqlite3

# 连接数据库,如果数据库文件不存在会自动创建
conn = sqlite3.connect('test.db')

# 创建游标对象
cursor = conn.cursor()

  • conn:数据库连接对象
  • cursor:游标对象,用于执行 SQL 语句

注意:完成操作后需要调用 conn.close() 关闭连接。


二、创建表

cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER,
    email TEXT UNIQUE
)
''')
conn.commit()  # 提交事务

  • IF NOT EXISTS:防止重复创建
  • PRIMARY KEY AUTOINCREMENT:主键自增
  • UNIQUE:唯一约束

三、插入数据

# 插入单条数据
cursor.execute('''
INSERT INTO users (name, age, email) VALUES (?, ?, ?)
''', ('Alice', 25, 'alice@example.com'))
conn.commit()

# 插入多条数据
users = [
    ('Bob', 30, 'bob@example.com'),
    ('Charlie', 22, 'charlie@example.com')
]
cursor.executemany('INSERT INTO users (name, age, email) VALUES (?, ?, ?)', users)
conn.commit()

  • 使用 ? 占位符防止 SQL 注入
  • executemany 批量插入效率更高

四、查询数据

# 查询所有数据
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
for row in rows:
    print(row)

# 查询单条数据
cursor.execute('SELECT * FROM users WHERE name=?', ('Alice',))
row = cursor.fetchone()
print(row)

  • fetchall():返回所有查询结果
  • fetchone():返回一条结果
  • ? 占位符用于参数化查询

五、更新数据

cursor.execute('UPDATE users SET age=? WHERE name=?', (26, 'Alice'))
conn.commit()


六、删除数据

cursor.execute('DELETE FROM users WHERE name=?', ('Charlie',))
conn.commit()


七、关闭连接

cursor.close()
conn.close()

  • 游标先关闭,连接再关闭
  • 确保事务提交,防止数据丢失

八、事务与异常处理

try:
    conn = sqlite3.connect('test.db')
    cursor = conn.cursor()
    cursor.execute('INSERT INTO users (name, age, email) VALUES (?, ?, ?)', ('David', 28, 'david@example.com'))
    conn.commit()
except sqlite3.Error as e:
    print('数据库错误:', e)
    conn.rollback()
finally:
    cursor.close()
    conn.close()

  • 使用 commit() 提交事务
  • 异常发生时使用 rollback() 回滚

九、实用技巧

  1. 获取数据库版本
cursor.execute('SELECT sqlite_version()')
print(cursor.fetchone())

  1. 使用字典类型返回结果
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
cursor.execute('SELECT * FROM users')
for row in cursor:
    print(row['name'], row['email'])

  1. 内存数据库
conn = sqlite3.connect(':memory:')  # 创建临时内存数据库

  1. 批量操作优化
  • 在大量插入时使用 executemany
  • 使用事务减少频繁提交

十、总结

  • Python 内置 sqlite3 模块,轻量、易用
  • 支持完整的 SQL 功能:增删改查、事务、索引、视图
  • 适合小型项目、测试、嵌入式应用
  • 对于大规模、高并发场景,建议使用 MySQL 或 PostgreSQL