游标在PyMySQL中有什么作用和作用?

What function and role does a cursor play in PyMySQL?

我搜索了网络,特别是 Stack Overflow 站点,但我找不到任何关于 游标 在 PyMySQL 中扮演的角色的简单解释。为什么需要它?它有什么功能?我可以有 多个 游标吗?我可以将它作为参数传递给 class 或函数吗?

查看带有示例的教程,我编写了使用游标的代码并且确实有效。但是到目前为止,在没有真正理解游标的作用和功能的情况下,游标的使用对我来说是违反直觉的。

请帮忙...

MySQL 中的游标在大多数情况下用于从结果集中检索行,然后对该数据执行操作。游标使您能够迭代从 SQL 查询返回的行。

这是一个例子。

1) 首先我们声明一个游标:

DECLARE cursor_name CURSOR FOR SELECT_statement;

2) 打开游标

OPEN cursor_name;

3) 现在我们可以使用 FETCH 语句检索结果集中的 next 行。 (回想一下 FETCH 语句的语法:FETCH [ NEXT [ FROM ] ] cursor_name INTO variable_list;。如您所见,游标在语法中,因此它是 FETCH 语句的重要组成部分)。

FETCH cursor_name INTO variable_list;

4) 总结:好的,所以我们已经使用 cursor_nameFETCH 下一行,我们将其存储在 variable_list(变量列表,以逗号分隔,游标结果应存储在此处)。

这应该说明以下内容:

  • FETCH 使用 MySQL 游标获取结果集中的下一行。
  • 游标是一种工具,用于遍历结果集中的行,一次一行。

pymysql游标

PyMySQL 用于 "interact" 数据库。但是,请查看 PEP 249,它定义了 Python 数据库 API 规范。

PyMySQL 是基于 PEP 249 规范的,所以 cursor 是从 PEP 249 规范派生的。

在 PEP 249 中我们看到了这个: https://www.python.org/dev/peps/pep-0249/#cursor-objects

"光标对象 这些对象代表一个数据库游标,用于管理获取操作的上下文。从同一连接创建的游标不是隔离的,即一个游标对数据库所做的任何更改都会立即被其他游标看到。从不同连接创建的游标可以隔离也可以不隔离,这取决于事务支持的实现方式(另请参阅连接的 .rollback() 和 .commit() 方法)。"