sqlite3
Python 标准库中用于操作 SQLite 数据库的模块,提供符合 DB-API 2.0 规范的接口,是 Python 开发者访问 SQLite 的默认方式。
时间轴 (近 90 天)
惰性游标是许多数据库驱动的常见陷阱:例如Python的sqlite3中,`execute()`返回的游标不会立即取回全部结果,若未调用`fetchall()`或迭代游标,查询可能未被完整消费且不抛异常。
sqlite3 的接口是为通用性和规范性设计的,而非为日常使用的便捷性设计,导致开发者需要反复编写建连接、创建游标、执行 SQL、遍历结果元组、手动映射为字典或对象、处理提交回滚、关闭连接等样板代码。
即便使用 row_factory 将结果转为 sqlite3.Row 对象,bool、日期、JSON 字段等类型转换仍需手写。
sqlite3、psycopg2、pymysql等库都实现了DB-API 2.0规范
标准库sqlite3完全没有暴露创建自定义虚拟表的接口,而APSW通过VTTable和VTCursor等类将这套机制完整映射到Python
对绝大多数应用而言标准库sqlite3是合理的默认选择,APSW更适合构建SQLite扩展、数据库工具及需要榨取SQLite全部性能的场景
全部知识事实 (7)
macOS上sqlite3等内置REPL使用的是libedit而非readline,这是其交互体验较差的原因
90%待验证惰性游标是许多数据库驱动的常见陷阱:例如Python的sqlite3中,`execute()`返回的游标不会立即取回全部结果,若未调用`fetchall()`或迭代游标,查询可能未被完整消费且不抛异常。
50%待验证sqlite3 的接口是为通用性和规范性设计的,而非为日常使用的便捷性设计,导致开发者需要反复编写建连接、创建游标、执行 SQL、遍历结果元组、手动映射为字典或对象、处理提交回滚、关闭连接等样板代码。
50%待验证即便使用 row_factory 将结果转为 sqlite3.Row 对象,bool、日期、JSON 字段等类型转换仍需手写。
50%待验证对绝大多数应用而言标准库sqlite3是合理的默认选择,APSW更适合构建SQLite扩展、数据库工具及需要榨取SQLite全部性能的场景
50%待验证sqlite3、psycopg2、pymysql等库都实现了DB-API 2.0规范
50%待验证标准库sqlite3完全没有暴露创建自定义虚拟表的接口,而APSW通过VTTable和VTCursor等类将这套机制完整映射到Python
50%