# 1. 使用 python 连接数据库并进行操作
- 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) - 常用语句总结
方法 | 作用 |
---|---|
execute(sql, params) | 执行单条 SQL 语句。 |
executemany(sql, data) | 执行多条 SQL 语句(批量插入或更新)。 |
fetchone() | 获取查询结果的下一行。 |
fetchall() | 获取查询结果的所有行。 |
fetchmany(size) | 获取指定数量的行。 |
scroll(value) | 在结果集中移动游标。 |
commit() | 提交当前事务。 |
rollback() | 回滚当前事务。 |
close() | 关闭游标,释放资源。 |
rowcount | 获取最近一次操作影响的行数。 |
description | 获取查询的元数据(列名、数据类型等)。 |
- 连接示例
1 | import psycopg2 |
# 使用建议
- 关闭游标和连接:无论是否发生异常,在操作结束时都应关闭游标和连接,确保资源得到释放。
- 事务控制:使用
commit()
提交数据,使用rollback()
进行回滚,确保数据一致性。 - 安全性:始终使用参数化查询防止 SQL 注入。
Cursor
是在 Python 中与数据库交互的核心工具,掌握其操作有助于编写高效、健壮的数据库应用程序。