作为一个宠物项目,我一直在编写自己的 ORM,以帮助我更好地理解生产级 ORM(如 Peewee 或更复杂的 sqlalchemy)所做的决策。
根据我的标题问题,是生成一个游标并将其重用于多个 SQL 执行还是为每个事务生成一个新游标更好?
我已经猜测过要避免状态问题(没有提交的事务),但是是否还有另一个原因为什么最好为每个操作(插入、更新、选择、删除或创建)使用一个游标?
您是否已分析并发现游标的创建是开销的重要来源?
游标是 DB-API 2.0 的产物,不一定是实际存在的“东西”。它们旨在提供用于执行查询和处理结果/迭代的通用接口。它们的底层实现方式取决于数据库驱动程序。如果您的目标是支持 DB-API 2.0 兼容驱动程序,我建议只需使用cursor() 方法为每个查询执行创建一个游标。我建议永远不要使用单例或共享游标。
例如,在 SQLite 中,游标本质上是sqlite3_stmt对象的包装器,因为不存在“sqlite3_cursor”这样的东西。stdlib sqlite3 驱动程序维护对象的内部缓存,sqlite3_stmt以避免编译经常使用的查询的成本。
| 归档时间: |
|
| 查看次数: |
2158 次 |
| 最近记录: |