gpt4 book ai didi

python - 为什么 django 和 python MySQLdb 每个数据库有一个游标?

转载 作者:太空狗 更新时间:2023-10-29 22:16:22 25 4
gpt4 key购买 nike

示例场景:

运行单个服务器的 MySQL -> HOSTNAME

该服务器上有两个 MySQL 数据库 -> USERS,GAMES。

任务 -> 从 GAMES.my_games_table 中获取 10 个最新游戏,并从 USERS.my_users_table 中获取玩这些游戏的用户(假设没有连接)

在 Django 和 Python MySQLdb 中,为什么每个数据库都有一个游标更可取?

扩展游标的缺点是什么,每个 MySQL 服务器只有一个,可以切换数据库(例如,通过查询“use USERS;”),然后在相应的数据库上工作

MySQL 连接很便宜,但如果存在线性流且没有可能需要两个游标的复杂事务,单个连接不是比多个连接更好吗?

最佳答案

一个简短的回答是,“MySQL 不支持那种类型的游标”,Python-MySQL 也不支持,所以首选一个连接命令的原因是因为这就是 MySQL 的工作方式。这是一种重言式。

但是,较长的答案是:

  1. 根据您的定义,“游标”是访问 RDMS 中的表和索引的某种类型的对象,能够维护其状态。
  2. 根据您的定义,“连接”将接受命令,并分配或重用游标来执行命令的操作,并将其结果返回给连接。
  3. 根据您的定义,“连接”可以/可以管理多个游标。
  4. 您认为这是访问数据库的首选/高效方式,因为“连接”很昂贵,而“游标”很便宜。

但是:

  1. MySQL(和其他 RDMS)中的 cursor 不是用于执行操作的用户可访问机制。 MySQL(和其他的)以“集合”的方式执行操作,或者更确切地说,它们将您的 SQL 命令编译成一个内部命令列表,并根据您的 SQL 命令的性质和您的表结构执行大量复杂的操作。
  2. 游标 是一种特定的机制,在存储过程中使用(并且仅在存储过程中使用),为开发人员提供了一种以程序方式处理数据的方法。
  3. MySQL 中的“连接”就是您认为的某种“游标”。 MySQL 不会将它的内部结构作为迭代器或指针向您公开,它们只是在表上移动。它将其内部公开为接受 SQL 和其他命令的“连接”,将这些命令转换为内部操作,执行该操作,并将结果返回给您。
  4. 这是“集合”和“程序”执行方式之间的区别(这实际上是关于控制的粒度,你,用户,被授予访问权限,或者至少是 RDMS 如何抽象所固有的粒度当它通过 API 公开它们时,会去除它的内部结构)。

关于python - 为什么 django 和 python MySQLdb 每个数据库有一个游标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14986129/

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