为什么mysqlclient中的游标不可选?

时间:2015-12-30 13:55:26

标签: python mysql cursor

我对Python和Flask很陌生,在完成这些示例的过程中,无法帮助注意游标。在此之前我用PHP编程,我从不需要游标。所以我想知道:什么是游标以及它们为什么在这些代码示例中使用了这么多?

但无论我转向何处,我都没有看到明确的判决和许多警告:

  • Wikipedia:"从光标中取一行可能会导致每次网络往返"和"游标在服务器上分配资源,例如锁,包,流程和临时存储。"
  • StackOverflow:见AndreasT的回答。
  • The Island of Misfit Cursors:"优秀的开发人员从不愿意仅使用工具,因为它经常被其他人误用。"

最重要的是,我了解到 MySQL不支持游标

看起来mysqlclient库中唯一没有使用游标的代码是_msql模块,作者反复警告不要出于兼容性原因使用游标:&#34 ;如果要编写可跨数据库移植的应用程序,请使用MySQLdb,并避免直接使用此模块。"

嗯,我希望我已经充分解释并支持了我的困境。以下是困扰我的两个大问题:

  1. 由于MySQL不支持游标,在Cursor类层次结构上构建整个事物的重点是什么?
  2. 为什么mysqlclient
  3. 中的游标不可选?

1 个答案:

答案 0 :(得分:3)

您的数据库引擎级游标和Python db-api游标令人困惑。第二个仅存在于Python代码级别,并不一定与数据库级别相关。

在Python级别,游标是一种封装查询及其结果的方法。这个抽象级别允许为不同的供应商提供简单,可用和通用的 api。给定供应商的实际实现是否依赖于数据库级游标是一个完全不同的问题。

总而言之:这里有两个截然不同的概念:

  1. 数据库(服务器)游标,一些存在于某些但不是所有SQL引擎中的功能
  2. db api(客户端)游标(在pep 249中定义),用于执行查询并最终获取结果。
  3. db api游标的命名是因为它们在概念上与数据库游标有一些相似之处,但在技术上完全不相关

    至于为什么mysqlclient以这种方式工作,它很简单:它实现了pep 249,它是Python SQL数据库客户端的社区定义的API。