Hello World

知识库
知识库文档
/tech-stacks/sqlite/examples/Hello World.md

文档

目标

通过 sqlite3 CLI 和 Python 标准库,完成 SQLite 数据库创建、表操作、CRUD,体验 SQLite "零配置"的优势。

环境准备

sqlite3 --version
python3 -c "import sqlite3; print('OK')"  # 确认自带

第一步:CLI 方式(最简)

# 创建数据库文件并进入交互模式
sqlite3 hello.db
-- 创建表
CREATE TABLE todos (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    task TEXT NOT NULL,
    done BOOLEAN DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- 插入
INSERT INTO todos (task) VALUES
    ('完成数据库作业'),
    ('复习SQL语法'),
    ('写实验报告');

-- 查询
SELECT * FROM todos;
.mode column          -- 格式化输出
.headers on
SELECT * FROM todos WHERE done = 0;

-- 更新
UPDATE todos SET done = 1 WHERE id = 1;

-- 删除
DELETE FROM todos WHERE id = 3;

SELECT * FROM todos;
.quit

第二步:Python 方式

import sqlite3

# 连接数据库(不存在则自动创建)
conn = sqlite3.connect("hello.db")
cursor = conn.cursor()

# 创建表
cursor.execute("""
    CREATE TABLE IF NOT EXISTS students (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        score REAL,
        grade TEXT GENERATED ALWAYS AS (
            CASE
                WHEN score >= 90 THEN 'A'
                WHEN score >= 80 THEN 'B'
                WHEN score >= 70 THEN 'C'
                ELSE 'F'
            END
        ) VIRTUAL
    )
""")

# 批量插入
students = [
    ("Alice", 95.5),
    ("Bob", 82.0),
    ("Charlie", 76.5),
]
cursor.executemany(
    "INSERT INTO students (name, score) VALUES (?, ?)",
    students
)
conn.commit()

# 查询
cursor.execute("SELECT * FROM students ORDER BY score DESC")
for row in cursor.fetchall():
    print(f"ID={row[0]} | {row[1]} | {row[2]}分 | {row[3]}")

# 统计
cursor.execute("SELECT grade, COUNT(*) FROM students GROUP BY grade")
for grade, count in cursor.fetchall():
    print(f"Grade {grade}: {count}人")

cursor.close()
conn.close()

第三步:Python 上下文管理器(推荐)

import sqlite3

with sqlite3.connect("hello.db") as conn:
    conn.row_factory = sqlite3.Row  # 字典式访问
    rows = conn.execute("SELECT * FROM students").fetchall()
    for r in rows:
        print(f"{r['name']}: {r['score']}分 → {r['grade']}")

预期输出

# CLI
id  task        done  created_at
--  ----------  ----  -------------------
1   完成数据库作业  1    2025-01-01 10:00:00
2   复习SQL语法     0    2025-01-01 10:00:00

# Python
ID=1 | Alice | 95.5分 | A
ID=2 | Bob | 82.0分 | B
ID=3 | Charlie | 76.5分 | C
Grade A: 1人
Grade B: 1人
Grade C: 1

信息

路径
/tech-stacks/sqlite/examples/Hello World.md
更新时间
2026/5/31