sqlite3
Python 标准库中用于操作 SQLite 数据库的模块,提供符合 DB-API 2.0 规范的接口,是 Python 开发者访问 SQLite 的默认方式。
时间轴 (近 90 天)
在Python的sqlite3中,fetchone()每次调用返回下一行,取完后再调用返回None;fetchall()一次性返回剩余所有行组成的列表,没有数据时返回空列表。
Python的sqlite3模块中,connect()返回一个连接对象,是程序与数据库之间的活链接。
cursor()创建游标对象,负责发送SQL并逐行遍历结果。
execute()一次只能执行一条SQL语句;将多条语句放入同一个execute()会触发ProgrammingError。
在Python的sqlite3中,插入操作会开启一个事务;不调用commit()就关闭连接,未提交的改动会被丢弃,但建表(DDL)语句会立即生效并幸存。
在Python 3.6及之后版本中,sqlite3的isolation_level默认值为"DEFERRED",事务在第一次执行数据修改语句时开始,直到显式调用commit()或rollback()才结束。
惰性游标是许多数据库驱动的常见陷阱:例如Python的sqlite3中,`execute()`返回的游标不会立即取回全部结果,若未调用`fetchall()`或迭代游标,查询可能未被完整消费且不抛异常。
sqlite3 的接口是为通用性和规范性设计的,而非为日常使用的便捷性设计,导致开发者需要反复编写建连接、创建游标、执行 SQL、遍历结果元组、手动映射为字典或对象、处理提交回滚、关闭连接等样板代码。
即便使用 row_factory 将结果转为 sqlite3.Row 对象,bool、日期、JSON 字段等类型转换仍需手写。
sqlite3、psycopg2、pymysql等库都实现了DB-API 2.0规范
还有 2 条时间轴事件
全部知识事实 (13)
macOS上sqlite3等内置REPL使用的是libedit而非readline,这是其交互体验较差的原因
90%待验证在Python的sqlite3中,fetchone()每次调用返回下一行,取完后再调用返回None;fetchall()一次性返回剩余所有行组成的列表,没有数据时返回空列表。
50%待验证Python的sqlite3模块中,connect()返回一个连接对象,是程序与数据库之间的活链接。
50%待验证cursor()创建游标对象,负责发送SQL并逐行遍历结果。
50%待验证execute()一次只能执行一条SQL语句;将多条语句放入同一个execute()会触发ProgrammingError。
50%待验证在Python的sqlite3中,插入操作会开启一个事务;不调用commit()就关闭连接,未提交的改动会被丢弃,但建表(DDL)语句会立即生效并幸存。
50%待验证在Python 3.6及之后版本中,sqlite3的isolation_level默认值为"DEFERRED",事务在第一次执行数据修改语句时开始,直到显式调用commit()或rollback()才结束。
50%待验证惰性游标是许多数据库驱动的常见陷阱:例如Python的sqlite3中,`execute()`返回的游标不会立即取回全部结果,若未调用`fetchall()`或迭代游标,查询可能未被完整消费且不抛异常。
50%待验证sqlite3 的接口是为通用性和规范性设计的,而非为日常使用的便捷性设计,导致开发者需要反复编写建连接、创建游标、执行 SQL、遍历结果元组、手动映射为字典或对象、处理提交回滚、关闭连接等样板代码。
50%待验证即便使用 row_factory 将结果转为 sqlite3.Row 对象,bool、日期、JSON 字段等类型转换仍需手写。
50%待验证sqlite3、psycopg2、pymysql等库都实现了DB-API 2.0规范
50%待验证标准库sqlite3完全没有暴露创建自定义虚拟表的接口,而APSW通过VTTable和VTCursor等类将这套机制完整映射到Python
50%待验证对绝大多数应用而言标准库sqlite3是合理的默认选择,APSW更适合构建SQLite扩展、数据库工具及需要榨取SQLite全部性能的场景
50%