好的,我们可以整理一份关于 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()
回滚
九、实用技巧
- 获取数据库版本
cursor.execute('SELECT sqlite_version()')
print(cursor.fetchone())
- 使用字典类型返回结果
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
cursor.execute('SELECT * FROM users')
for row in cursor:
print(row['name'], row['email'])
- 内存数据库
conn = sqlite3.connect(':memory:') # 创建临时内存数据库
- 批量操作优化
- 在大量插入时使用
executemany
- 使用事务减少频繁提交
十、总结
- Python 内置
sqlite3
模块,轻量、易用 - 支持完整的 SQL 功能:增删改查、事务、索引、视图
- 适合小型项目、测试、嵌入式应用
- 对于大规模、高并发场景,建议使用 MySQL 或 PostgreSQL
发表回复