# 1. 使用 python 连接数据库并进行操作

  1. cursor 的基本使用
    行高亮
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    #1. 创建cursor
    cursor = connection.cursor()

    #2. 执行sql语句
    cursor.execute(sql_query, parameters)
    #示例 解释:此查询将返回 `HR` 部门的所有员工。`%s` 是占位符,第二个参数提供了实际的值,防止 SQL 注入。
    cursor.execute("SELECT * FROM Employees WHERE department = %s;", ('HR',))
    #在执行 `SELECT` 查询后,`Cursor` 提供了多种方法来获取结果集中的数据。

    #3.查询执行结果
    #fetchone()
    #获取查询结果的下一行,返回一个元组。如果没有更多行,返回 `None`。
    row = cursor.fetchone()
    print(row)

    #fetchall() 获取查询结果的所有行,返回一个包含多个元组的列表。
    rows = cursor.fetchall()
    for row in rows:
    print(row)

    #fetchmany(size) 获取指定数量的行(`size` 是行的数量),返回一个包含多个元组的列表。
    rows = cursor.fetchmany(5) # 获取5行数据

    #4.迭代 Cursor 可以将 `Cursor` 作为迭代器来逐行遍历结果集。
    cursor.execute("SELECT * FROM Employees;")
    for row in cursor:
    print(row)


    #5. executemany() 方法用于执行多条 SQL 语句,通常是 `INSERT` 或 `UPDATE`。它会将同一条 SQL 语句应用于一组参数集合。
    query = "INSERT INTO Employees (employee_id, name, department, salary) VALUES (%s, %s, %s, %s)"
    data = [
    (6, 'Alice', 'HR', 60000),
    (7, 'Bob', 'Engineering', 75000),
    (8, 'Charlie', 'Marketing', 50000)
    ]
    cursor.executemany(query, data)
    connection.commit()

    #6. 事务控制
    #当执行插入、更新或删除操作时,必须调用 `commit()` 方法来提交事务,使更改生效。
    connection.commit()
    #如果在执行 SQL 语句期间发生错误,可以调用 `rollback()` 方法撤销更改,回滚到事务开始前的状态。
    connection.rollback()

    #7.关闭 Cursor
    #在完成对数据库的操作后,应该关闭 `Cursor` 以释放资源。
    cursor.close()

    #8.获取查询状态
    #rowcount:返回由最近的 `execute()` 操作影响的行数(例如 `INSERT`、`UPDATE`、`DELETE`)
    cursor.execute("UPDATE Employees SET salary = salary + 5000 WHERE department = 'HR';")
    print(cursor.rowcount, "rows affected")
    #`statusmessage`:返回最近一次执行操作的状态信息。
    print(cursor.statusmessage)

    #9.游标的移动和控制
    #`scroll()`:允许你在结果集内移动游标。例如,可以向前或向后移动指定的行数。
    cursor.execute("SELECT * FROM Employees;")
    cursor.scroll(2) # 游标前进2行
    row = cursor.fetchone() # 获取游标所在行的数据
    print(row)

    #`description`:返回结果集中每一列的元数据,如列名等。
    cursor.execute("SELECT * FROM Employees;")
    for col in cursor.description:
    print(col.name)
  2. 常用语句总结
方法作用
execute(sql, params)执行单条 SQL 语句。
executemany(sql, data)执行多条 SQL 语句(批量插入或更新)。
fetchone()获取查询结果的下一行。
fetchall()获取查询结果的所有行。
fetchmany(size)获取指定数量的行。
scroll(value)在结果集中移动游标。
commit()提交当前事务。
rollback()回滚当前事务。
close()关闭游标,释放资源。
rowcount获取最近一次操作影响的行数。
description获取查询的元数据(列名、数据类型等)。
  1. 连接示例

raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import psycopg2

# 数据库连接参数
DB_HOST = "localhost"
DB_NAME = "your_database"
DB_USER = "your_username"
DB_PASS = "your_password"
DB_PORT = "5432"

try:
# 1. 连接到 PostgreSQL 数据库
connection = psycopg2.connect(
host=DB_HOST,
database=DB_NAME,
user=DB_USER,
password=DB_PASS,
port=DB_PORT
)

# 2. 创建一个游标对象
cursor = connection.cursor()

# 3. 执行 SQL 查询
cursor.execute("SELECT version();")

# 4. 获取查询结果
db_version = cursor.fetchone()
print(f"PostgreSQL 版本: {db_version}")

# 5. 插入数据的示例
cursor.execute("""
INSERT INTO Employees (employee_id, name, department, salary, hire_date, city, age)
VALUES (6, 'John Doe', 'Sales', 45000, '2022-09-15', 'Boston', 29);
""")

# 提交事务
connection.commit()

# 6. 执行查询来检查插入结果
cursor.execute("SELECT * FROM Employees WHERE employee_id = 6;")
new_employee = cursor.fetchone()
print(f"新员工数据: {new_employee}")

except Exception as error:
print(f"数据库操作出现错误: {error}")

finally:
# 7. 关闭游标和连接
if cursor:
cursor.close()
if connection:
connection.close()

# 使用建议

  • 关闭游标和连接:无论是否发生异常,在操作结束时都应关闭游标和连接,确保资源得到释放。
  • 事务控制:使用 commit() 提交数据,使用 rollback() 进行回滚,确保数据一致性。
  • 安全性:始终使用参数化查询防止 SQL 注入。

Cursor 是在 Python 中与数据库交互的核心工具,掌握其操作有助于编写高效、健壮的数据库应用程序。