Python 提供了多种方式来与 SQLite 数据库交互,最常用的是内置的 sqlite3
模块,此外,流行的 SQLAlchemy 库也为 SQLite 提供了强大的 ORM 支持。无论是直接操作数据库,还是通过 ORM 进行面向对象的数据库交互,Python 都能轻松应对。
📚 目录
- 环境准备:确保 Python 支持 SQLite
- 使用 sqlite3 模块操作 SQLite
- 创建数据库连接
- 执行 SQL(增删改查)
- 预处理语句与事务
- 使用 SQLAlchemy 操作 SQLite
- 安装与配置 SQLAlchemy
- 定义模型与创建表
- 增删改查操作
- 性能调优技巧
- 安全实践:防止 SQL 注入
- 出站链接与推荐阅读
- 参考资料
1. 环境准备:确保 Python 支持 SQLite
Python 默认包含 sqlite3
模块,因此通常无需额外安装。你可以通过以下命令验证 sqlite3
模块是否存在:
python -c "import sqlite3; print(sqlite3.version)"
如果显示版本号,则说明 Python 已经启用了 SQLite 支持。
如果需要使用 SQLAlchemy,可以通过以下命令安装:
pip install sqlalchemy
2. 使用 sqlite3 模块操作 SQLite
2.1 创建数据库连接
import sqlite3
# 连接到 SQLite 数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
2.2 执行 SQL(增删改查)
# 创建表
cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)''')
# 插入数据
cursor.execute("INSERT INTO users (name) VALUES ('Alice')")
conn.commit()
# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
# 更新数据
cursor.execute("UPDATE users SET name = 'Bob' WHERE id = 1")
conn.commit()
# 删除数据
cursor.execute("DELETE FROM users WHERE id = 1")
conn.commit()
2.3 预处理语句与事务
使用 ?
占位符防止 SQL 注入:
cursor.execute("INSERT INTO users (name) VALUES (?)", ('Charlie',))
conn.commit()
# 事务处理
try:
conn.execute("BEGIN")
cursor.execute("INSERT INTO users (name) VALUES (?)", ('David',))
cursor.execute("INSERT INTO users (name) VALUES (?)", ('Eve',))
conn.commit() # 提交事务
except sqlite3.Error as e:
conn.rollback() # 回滚事务
print(f"Error: {e}")
3. 使用 SQLAlchemy 操作 SQLite
SQLAlchemy 是 Python 中最常用的 ORM 库,可以更方便地与 SQLite 数据库进行交互,尤其适用于较大的应用程序。
3.1 安装与配置 SQLAlchemy
pip install sqlalchemy
3.2 定义模型与创建表
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
# 创建数据库连接
engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)
3.3 增删改查操作
Session = sessionmaker(bind=engine)
session = Session()
# 插入数据
new_user = User(name='Alice')
session.add(new_user)
session.commit()
# 查询数据
users = session.query(User).all()
for user in users:
print(user.id, user.name)
# 更新数据
user_to_update = session.query(User).filter(User.id == 1).first()
user_to_update.name = 'Bob'
session.commit()
# 删除数据
user_to_delete = session.query(User).filter(User.id == 1).first()
session.delete(user_to_delete)
session.commit()
4. 性能调优技巧
优化项 | 方法 |
---|---|
启用 WAL 模式 | conn.execute("PRAGMA journal_mode = WAL") |
索引的使用 | 在经常查询的字段上创建索引:CREATE INDEX idx_name ON users(name) |
批量插入 | 使用 executemany() 进行批量操作 |
连接池管理 | 使用 SQLAlchemy 的连接池管理数据库连接 |
内存数据库 | 使用 sqlite:///:memory: 进行内存数据库操作 |
5. 安全实践:防止 SQL 注入
在 SQLite 中,最常见的 SQL 注入攻击是通过直接拼接用户输入的 SQL 语句来执行恶意操作。使用 sqlite3
或 SQLAlchemy 的预处理语句来避免注入问题。
错误做法:
name = "Bob' OR 1=1 --"
cursor.execute("SELECT * FROM users WHERE name = '" + name + "'")
正确做法:
cursor.execute("SELECT * FROM users WHERE name = ?", (name,))
对于 SQLAlchemy:
session.query(User).filter(User.name == name).all()
6. 🔗 出站链接与推荐阅读
官方资源:
推荐文章(站内):
- 👉 Python 使用 sqlite3 完整指南
- 👉 SQLAlchemy ORM 操作 SQLite 详解
- 👉 Python 性能调优:数据库操作与连接池管理
- 👉 Python 中防止 SQL 注入的最佳实践
7. 📚 参考资料
- Python sqlite3 文档:https://docs.python.org/3/library/sqlite3.html
- 《Python 数据库编程》——O’Reilly
- SQLAlchemy 官方文档:https://www.sqlalchemy.org/
- Stack Overflow:Python + SQLite 常见问题解答
- GitHub 示例项目:https://github.com/sqlalchemy/sqlalchemy
✅ 以上便是 SQLite 在 Python 中的操作详解,涵盖了 sqlite3
和 SQLAlchemy 两种常用方式。如果你对其他语言与 SQLite 的集成方法有兴趣,可以继续关注本系列教程。
发表回复