首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么mysqlclient中没有游标是可选的?

为什么mysqlclient中没有游标是可选的?
EN

Stack Overflow用户
提问于 2015-12-30 13:55:25
回答 1查看 455关注 0票数 4

我对Python和Flask非常陌生,在研究示例时,我不禁注意到游标。在此之前,我用PHP编程,在那里我从来不需要游标。所以我想知道:什么是游标,为什么在这些代码示例中这么多地使用游标?

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

  • 维基百科:“每次从游标中获取一行可能导致网络往返”,“游标在服务器上分配资源,例如锁、包、进程和临时存储”。
  • StackOverflow:见AndreasT的答案。
  • 错位游标岛:“一个优秀的开发人员从来不会因为工具经常被别人滥用而不愿意使用它。”

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

看起来,mysqlclient库中唯一不使用游标的代码是_msql模块,作者反复警告说,出于兼容性原因,不要使用它:“如果您想编写跨数据库可移植的应用程序,请使用MySQLdb,避免直接使用该模块。”

好吧,我希望我已经很好地解释和支持了我的困境。这里有两个困扰我的大问题:

  1. 既然MySQL不支持游标,那么在游标类层次结构上构建整个东西的意义何在?
  2. 为什么在mysqlclient中游标不是可选的
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-30 14:27:11

您的数据库引擎级别游标和Python api游标混淆了。第二个问题只存在于Python代码级别,而不一定与数据库级别的代码相关联。

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

长话短说:这里有两个不同的概念:

  1. 数据库(服务器)游标,这一特性存在于某些SQL引擎中,而不是所有SQL引擎中。
  2. db (client)游标(在佩普249中定义),用于执行查询并最终获取结果。

之所以命名db游标,是因为它们在概念上与数据库游标有一些相似之处,但在技术上是完全无关的。

至于mysqlclient为什么这样工作,它很简单:它实现了佩普249,这是用于Python数据库客户端的社区定义的API。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34530940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档