name: 使用关系型数据库 description: 在Python、Rust、Go和TypeScript中实现关系型数据库。适用于构建CRUD应用、事务系统或结构化数据存储。涵盖PostgreSQL(主要)、MySQL、SQLite、ORM(SQLAlchemy、Prisma、SeaORM、GORM)、查询构建器(Drizzle、sqlc、SQLx)、迁移、连接池和无服务器数据库(Neon、PlanetScale、Turso)。
关系型数据库
目的
本技能指导在多语言环境中选择和实现关系型数据库。为事务系统、CRUD应用和结构化数据存储选择最优的数据库引擎、ORM/查询构建器和部署策略。
何时使用此技能
触发此技能当:
- 构建用户认证、内容管理、电子商务应用
- 实现CRUD操作(创建、读取、更新、删除)
- 设计具有关系的数据模型(用户→帖子、订单→物品)
- 在生产环境中安全迁移模式
- 为性能设置连接池
- 评估无服务器数据库选项(Neon、PlanetScale、Turso)
- 与前端技能集成(表单、表格、仪表板、搜索过滤)
跳过此技能对于:
- 大规模时间序列数据(使用时序数据库)
- 实时分析(使用列式数据库)
- 文档密集型工作负载(使用文档数据库)
- 键值缓存(使用Redis、Memcached)
快速参考:数据库选择
数据库选择决策树
═══════════════════════════════════════════════════════════
主要关注点?
├─ 最大灵活性和扩展性(JSON、数组、向量搜索)
│ └─ PostgreSQL
│ ├─ 无服务器 → Neon(缩放至零、数据库分支)
│ └─ 传统 → 自托管、AWS RDS、Google Cloud SQL
│
├─ 嵌入式/边缘部署(本地优先、全局延迟)
│ └─ SQLite或Turso
│ ├─ 全局分发 → Turso(libSQL、边缘副本)
│ └─ 仅本地 → SQLite(嵌入式、零配置)
│
├─ 遗留系统/MySQL必需
│ └─ MySQL
│ ├─ 无服务器 → PlanetScale(非阻塞迁移)
│ └─ 传统 → 自托管、AWS RDS、Google Cloud SQL
│
└─ 快速原型开发
├─ Python → SQLModel(FastAPI)或SQLAlchemy 2.0
├─ TypeScript → Prisma(最佳开发者体验)或Drizzle(性能)
├─ Rust → SQLx(编译时检查)
└─ Go → sqlc(类型安全代码生成)
快速参考:ORM与查询构建器
ORM与查询构建器选择
═══════════════════════════════════════════════════════════
团队优先事项?
├─ 开发速度/开发者体验
│ └─ ORM(抽象SQL,自动处理关系)
│ ├─ Python → SQLAlchemy 2.0、SQLModel
│ ├─ TypeScript → Prisma(迁移、类型生成)
│ ├─ Rust → SeaORM(Active Record + Data Mapper)
│ └─ Go → GORM、Ent
│
├─ 性能/查询控制
│ └─ 查询构建器(类SQL,零抽象开销)
│ ├─ Python → SQLAlchemy Core、asyncpg
│ ├─ TypeScript → Drizzle、Kysely
│ ├─ Rust → SQLx(编译时查询验证!)
│ └─ Go → sqlc(从SQL生成类型)
│
├─ 类型安全/编译时保证
│ ├─ Rust → SQLx(在构建时检查查询)
│ ├─ Go → sqlc(从SQL生成类型)
│ ├─ TypeScript → Prisma或Drizzle
│ └─ Python → SQLModel(Pydantic集成)
│
└─ 复杂查询/连接
├─ SQL优先 → 查询构建器或原始SQL
└─ ORM友好 → SeaORM、SQLAlchemy ORM
多语言实现
Python:SQLAlchemy 2.0 + SQLModel
推荐库:
- SQLAlchemy 2.0 (
/websites/sqlalchemy_en_21) - ORM + Core,7,090代码片段 - SQLModel - FastAPI集成,Pydantic验证
- asyncpg - 高性能异步PostgreSQL驱动
何时使用:
- 需要灵活性的生产应用
- FastAPI/Starlette后端
- 异步/等待工作流
快速模式:
from sqlmodel import SQLModel, Field, Session
class User(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
email: str = Field(unique=True, index=True)
参见: references/orms-python.md 获取完整的SQLAlchemy/SQLModel模式、异步工作流和连接池。
TypeScript:Prisma与Drizzle
推荐库:
- Prisma 6.x (
/prisma/prisma, 评分:96.4, 4,281文档片段) - 最佳开发者体验,迁移 - Drizzle ORM (
/drizzle-team/drizzle-orm-docs, 评分:95.4, 4,037片段) - 性能,类SQL语法
快速比较:
- Prisma:最佳开发者体验,自动生成类型,包含迁移
- Drizzle:最佳性能,类SQL语法,零开销
参见: references/orms-typescript.md 获取Prisma与Drizzle的详细比较、Kysely、TypeORM模式。
Rust:SQLx(编译时检查)
推荐库:
- SQLx 0.8 - 编译时查询验证,异步
- SeaORM 1.x - 带有Active Record模式的完整ORM
- Diesel 2.3 - 成熟、稳定(同步/异步)
快速模式:
use sqlx::FromRow;
#[derive(FromRow)]
struct User { id: i32, email: String, name: String }
// 编译时检查的查询(在构建时验证!)
let user = sqlx::query_as::<_, User>("SELECT * FROM users WHERE email = $1")
.bind("test@example.com").fetch_one(&pool).await?;
参见: references/orms-rust.md 获取SQLx宏、SeaORM、Diesel模式和编译时保证。
Go:sqlc(类型安全代码生成)
推荐库:
- sqlc - 从SQL查询生成Go代码
- GORM v2 - 带有关联、钩子的完整ORM
- Ent - 基于图的ORM,代码作为模式
- pgx - 高性能PostgreSQL驱动
快速模式:
-- queries.sql: SQL注解生成类型安全的Go代码
-- name: CreateUser :one
INSERT INTO users (email, name) VALUES ($1, $2) RETURNING *;
user, err := queries.CreateUser(ctx, db.CreateUserParams{Email: "test@example.com"})
参见: references/orms-go.md 获取sqlc设置、GORM、Ent和pgx模式。
连接池
推荐池大小:
- Web API(单实例):10-20个连接
- 无服务器(每个函数):1-2个连接 + pgBouncer
- 后台工作器:5-10个连接
参见: references/connection-pooling.md 获取配置示例、大小公式和监控策略。
迁移
关键原则:
- 使用多阶段部署进行列删除(生产环境绝不直接删除)
- 使用
CREATE INDEX CONCURRENTLY(PostgreSQL)避免阻塞写入 - 在具有生产级数据量的暂存环境中测试迁移
工具: Alembic(Python)、Prisma Migrate(TypeScript)、SQLx迁移(Rust)、golang-migrate(Go)
参见: references/migrations-guide.md 获取安全迁移模式、多阶段部署和回滚策略。
无服务器数据库
| 数据库 | 类型 | 关键特性 | 最佳适用 |
|---|---|---|---|
| Neon | PostgreSQL | 数据库分支、缩放至零 | 开发工作流、预览环境 |
| PlanetScale | MySQL(Vitess) | 非阻塞模式更改 | MySQL应用、零停机迁移 |
| Turso | SQLite(libSQL) | 边缘部署、低延迟 | 边缘函数、全局分发 |
参见: references/serverless-databases.md 获取设置示例、分支工作流和成本比较。
前端集成
常见集成模式:
- 表单技能:表单提交 → API验证 → 数据库CRUD(INSERT/UPDATE)
- 表格技能:分页查询 → API → 带有排序/过滤的表格显示
- 仪表板技能:聚合查询(COUNT、SUM) → API → KPI卡片
- 搜索过滤技能:全文搜索(PostgreSQL tsvector) → 排名结果
参见工作示例在: examples/python-sqlalchemy/、examples/typescript-drizzle/、examples/rust-sqlx/
捆绑资源
参考文档
references/postgresql-guide.md- PostgreSQL特性(pgvector、PostGIS、TimescaleDB)references/mysql-guide.md- MySQL特定模式、PlanetScale集成references/sqlite-guide.md- SQLite模式、Turso边缘部署references/orms-python.md- SQLAlchemy 2.0、SQLModel、asyncpgreferences/orms-typescript.md- Prisma、Drizzle、Kysely比较references/orms-rust.md- SQLx、SeaORM、Dieselreferences/orms-go.md- GORM、sqlc、Ent、pgxreferences/migrations-guide.md- 安全模式演化模式references/connection-pooling.md- 池大小和监控references/serverless-databases.md- Neon、PlanetScale、Turso部署
工作示例
examples/python-sqlalchemy/- SQLAlchemy 2.0 + FastAPI带池、迁移examples/typescript-prisma/- Prisma + Next.js带模式、迁移examples/typescript-drizzle/- Drizzle + Hono带类型安全查询examples/rust-sqlx/- SQLx + Axum带编译时检查examples/go-sqlc/- sqlc + Gin带生成的类型安全代码
实用脚本
scripts/validate_schema.py- 验证数据库模式结构、约束scripts/generate_migration.py- 为常见操作生成迁移模板
最佳实践
安全:
- 始终使用参数化查询(防止SQL注入)
- 用Argon2/bcrypt哈希密码
- 使用环境变量存储连接字符串
- 在生产环境中启用SSL/TLS
性能:
- 使用连接池(Web API为10-20个)
- 在过滤/排序列上创建索引
- 为大结果集实现分页
- 使用
EXPLAIN ANALYZE分析慢查询
可靠性:
- 先在暂存环境测试迁移
- 为多语句操作使用事务
- 监控连接池耗尽
- 设置并测试数据库备份
开发:
- 版本控制模式和迁移
- 使用数据库分支(Neon)进行功能开发
- 编写针对真实数据库的集成测试