SQLite适合本地轻量开发,MySQL适用于高并发Web应用,PostgreSQL强于复杂查询与数据一致性,三者可通过SQLAlchemy统一抽象模型并适配差异。
SQLite 不需要单独安装服务,直接通过 Python 内置的 sqlite3 模块就能操作,适合原型开发、小型工具或单机应用。它把整个数据库存为一个文件,开箱即用。
常见操作示例:
conn = sqlite3.connect("app.db")
conn.execute("PRAGMA foreign_keys = ON")
with conn: 自动提交事务,避免手动 commit() 遗漏c.execute("SELECT * FROM users WHERE age > ?", (18,))
MySQL 更适合多用户、高并发的 Web 项目,需搭配 pymysql 或 mysql-connector-python 使用。推荐用 SQLAlchemy 统一管理连接池和 ORM 映射,避免裸写连接逻辑。
关键配置注意点:
立即学习“Python免费学习笔记(深入)”;
charset=utf8mb4,确保正确支持 emoji 和中文autocommit=False(默认),由 SQLAlchemy 或手动控制事务边界SQLAlchemy(pool_pre_ping=True))自动检测失效连接pool_recycle=3600 定期重连PostgreSQL 对 JSON、全文检索、地理空间、窗口函数等支持更完善,适合分析型或强一致性要求的系统。Python 推荐使用 psycopg2(性能好)或 asyncpg(异步场景)。
实用技巧:
psycopg2.extras.RealDictCursor 获取带字段名的字典结果,不用硬编码索引execute_batch() 或 copy_from(),比循环 execute() 快 5–10 倍ON CONFLICT DO UPDATE 实现“存在则更新,否则插入”,替代先查后插逻辑timestamptz 类型,配合 timezone='UTC' 连接参数,避免时区混乱不用为每个数据库重写 CRUD,SQLAlchemy 的 Core + ORM 可以屏蔽底层差异。定义一次模型,切换数据库只需改 URL:
sqlite:///app.db
mysql+pymysql://user:pass@localhost/dbname
postgresql+psycopg2://user:pass@localhost/dbname
注意兼容性细节:
Integer(primary_key=True),MySQL/PG 需显式加 autoincrement=True
String(50) 限制,MySQL/PG 会校验,建议统一设 Text() 或按需约束