gpt4 book ai didi

python - 为什么游标在 mysqlclient 中不是可选的?

转载 作者:可可西里 更新时间:2023-11-01 08:10:52 25 4
gpt4 key购买 nike

我是 Python 和 Flask 的新手,在研究这些示例时,我忍不住注意到游标。在此之前,我用 PHP 编程,从不需要游标。所以我想知道:什么是游标,为什么在这些代码示例中如此频繁地使用游标?

但无论我转向哪里,我都没有看到明确的结论和许多警告:

  • Wikipedia :“每次从游标中获取一行可能会导致网络往返”,以及“游标在服务器上分配资源,例如锁、包、进程和临时存储。”
  • StackOverflow :请参阅 AndreasT 的回答。
  • The Island of Misfit Cursors :“优秀的开发人员绝不会仅仅因为一种工具经常被其他人滥用而不愿意使用它。”

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

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

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

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

最佳答案

您混淆了数据库引擎级游标和 Python db-api 游标。第二种仅存在于 Python 代码级别,不一定与数据库级别相关联。

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

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

  1. 数据库(服务器)游标,一种存在于某些但并非所有 SQL 引擎中的功能
  2. db api(客户端)游标(在 pep 249 中定义),用于执行查询并最终获取结果。

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

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

关于python - 为什么游标在 mysqlclient 中不是可选的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34530940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com