数据库连接中,游标是什么

193 阅读2分钟

在 Python 中使用 sqlite3 模块访问 SQLite 数据库时,你提到的这行代码:

python
深色版本
cursor = db_connection.cursor()

其中的 cursor(游标) 是数据库编程中非常核心的一个概念。


🧠 一、什么是 Cursor(游标)?

Cursor(游标)是一个用于操作数据库的“指针”或“工具”,它允许你执行 SQL 命令并遍历结果集。

你可以把它想象成一个“数据库操作员”,所有对数据库的操作(查询、插入、更新、删除等)都必须通过这个游标来完成。


✅ 二、为什么需要 Cursor?

  1. 执行 SQL 语句

    • 所有的 SQL 查询和命令都是通过游标对象来执行的。

    • 示例:

      python
      深色版本
      cursor.execute("SELECT * FROM users")
      
  2. 获取查询结果

    • 游标可以用来逐行读取查询结果。

    • 示例:

      python
      深色版本
      rows = cursor.fetchall()  # 获取全部结果
      row = cursor.fetchone()   # 获取一行
      
  3. 支持多次查询

    • 同一个连接可以创建多个游标,分别执行不同的 SQL 操作。
  4. 事务控制

    • 虽然事务通常由 Connection 对象管理,但实际的 SQL 操作是通过游标执行的。

📌 三、Cursor 的主要方法

方法说明
execute(sql, [parameters])执行一条 SQL 语句(可带参数)
executemany(sql, seq_of_parameters)批量执行 SQL 语句
executescript(sql_script)执行多条 SQL 语句(如脚本)
fetchone()获取下一行结果(单条记录)
fetchmany(size=cursor.arraysize)获取指定数量的结果
fetchall()获取剩余的所有结果
close()关闭游标,释放资源

🧪 四、示例:完整流程演示

python
深色版本
import sqlite3

# 1. 连接到数据库(如果不存在会自动创建)
db_connection = sqlite3.connect("example.db")

# 2. 创建游标
cursor = db_connection.cursor()

# 3. 使用游标执行 SQL 命令
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)")
cursor.execute("INSERT INTO users (name) VALUES (?)", ("Alice",))

# 4. 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()

for row in rows:
    print(row)

# 5. 提交事务
db_connection.commit()

# 6. 关闭游标和连接
cursor.close()
db_connection.close()

⚠️ 五、注意事项

  • 游标使用完后最好关闭,避免资源泄漏。
  • 每个游标只能同时处理一个 SQL 操作,如果你有多个并发操作需求,可以创建多个游标。
  • 不要在多个线程中共享同一个游标对象,SQLite 不支持这种用法。
  • Python 的 sqlite3 模块默认将游标返回的数据以元组形式呈现,也可以通过设置 row_factory 改为字典形式。

✅ 六、总结一句话:

在 Python 的 sqlite3 模块中,cursor 是执行 SQL 命令和获取查询结果的核心对象,几乎所有的数据库操作都要通过它来进行。


如果你正在开发一个小型桌面应用、日志系统、配置存储器等,使用 sqlite3 + cursor 是一种轻量、高效、无需安装数据库服务器的理想方式。