Skip to content

SQLite

简介

SQLite 是嵌入式关系型数据库,无需独立服务进程,整个数据库就是一个文件。轻量、零配置、可靠,适合小型应用、移动端、嵌入式、测试、本地工具等场景。

核心优势

优势说明
零配置无需安装服务,无需连接字符串
单文件整个数据库一个文件,方便备份和迁移
跨平台同一个数据库文件可在不同系统使用
可靠ACID 事务,WAL 模式支持并发读
体积小库文件几百 KB

局限性

局限说明
并发写入只允许一个写入者(WAL 模式下可并发读)
无用户管理依赖文件系统权限
不适合分布式单机数据库,无法做主从复制
数据规模建议不超过几十 GB

基本操作

sql
-- 建表
CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT UNIQUE
);

-- 开启 WAL 模式(推荐,允许并发读)
PRAGMA journal_mode = WAL;

-- CRUD
INSERT INTO users (name, email) VALUES ('张三', 'test@example.com');
SELECT * FROM users WHERE age > 18;
UPDATE users SET age = 26 WHERE name = '张三';
DELETE FROM users WHERE id = 1;

Python 操作

sqlite3 标准库

python
import sqlite3

conn = sqlite3.connect("app.db")
conn.row_factory = sqlite3.Row  # 结果可用列名访问

# 建表 + 插入 + 查询
conn.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)")
conn.execute("INSERT INTO users (name) VALUES (?)", ("张三",))
conn.commit()

rows = conn.execute("SELECT * FROM users").fetchall()

# 批量插入
conn.executemany("INSERT INTO users (name) VALUES (?)", [("李四",), ("王五",)])

# 上下文管理器(自动事务)
with conn:
    conn.execute("UPDATE users SET name = ? WHERE id = ?", ("张三三", 1))
操作方法
单条插入execute(sql, params)
批量插入executemany(sql, params_list)
自动事务with conn: ...

aiosqlite(异步)

python
import aiosqlite

async def get_users():
    async with aiosqlite.connect("app.db") as db:
        db.row_factory = aiosqlite.Row
        async with db.execute("SELECT * FROM users") as cursor:
            return await cursor.fetchall()

SQLAlchemy + SQLite

python
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base, Session

Base = declarative_base()

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)

engine = create_engine("sqlite:///app.db")
Base.metadata.create_all(engine)

with Session(engine) as session:
    session.add(User(name="张三"))
    session.commit()

适用场景

  • 本地工具和脚本
  • 移动端 / 桌面应用
  • 单元测试(替代真实数据库)
  • 原型开发
  • 嵌入式设备
  • 中小型网站(日活 < 10 万)

基于 VitePress 构建