遍历pymysql结果集
时间: 2023-12-19 12:32:00 浏览: 362
遍历pymysql结果集可以使用fetchall()方法获取所有数据,然后使用for循环遍历数据。具体实现可以参考以下代码:
```python
import pymysql
# 连接数据库
link = pymysql.connect(
host='127.0.0.1', # 连接地址,连接本地默认,127.0.0.1
user='root', # 用户名
passwd='******', # 密码
port=3306, # 端口,默认为3306
db='studentdb', # 数据库名称
charset='utf8' # 字符编码
)
# 生成游标对象
cur = link.cursor()
# 写SQL语句
sql = "SELECT * FROM Student"
# 执行SQL语句
cur.execute(sql)
# 获取所有数据
data = cur.fetchall()
# 遍历数据
for i in data:
print(i)
# 关闭游标和连接
cur.close()
link.close()
```
相关问题
pymysql 返回结果
### 处理 pymysql 查询返回的结果
当使用 `pymysql` 库进行数据库查询时,可以通过多种方式来获取和处理查询结果。以下是几种常见的方法:
#### 方法一:fetchall()
此函数会一次性取出所有的记录,并将其作为列表形式返回给调用者。如果数据量较大,则不建议采用这种方式。
```python
import pymysql
conn = pymysql.connect(
host='localhost',
user='root',
password='123456',
port=3306,
database='mysql'
)
try:
with conn.cursor(pymysql.cursors.DictCursor) as cursor:
sql = "SELECT * FROM db;"
cursor.execute(sql)
results = cursor.fetchall() # 获取所有行作为一个字典组成的列表
finally:
conn.close()
print(results)
```
这种方法适用于字段较少的情况,在字段较多或结构复杂的情况下可能需要修改对应代码以适应变化[^2]。
#### 方法二:fetchone()
每次只取一条记录出来,直到遍历完全部为止。对于大数据集来说更加节省内存空间。
```python
with conn.cursor(pymysql.cursors.DictCursor) as cursor:
sql = "SELECT * FROM db;"
cursor.execute(sql)
while True:
row = cursor.fetchone()
if not row:
break
print(row)
```
该循环可以逐条读取每一行的数据直至结束,适合于流式处理场景下应用。
#### 方法三:fetchmany(size=n)
指定数量n去拿取部分记录,默认情况下等于cursor.arraysize属性值(通常为1)。可以根据实际需求调整参数大小从而控制批量加载的数量。
```python
batch_size = 10
with conn.cursor(pymysql.cursors.DictCursor) as cursor:
sql = "SELECT * FROM db;"
cursor.execute(sql)
while True:
rows = cursor.fetchmany(batch_size)
if not rows:
break
for row in rows:
print(row)
```
通过设置合理的批次大小,可以在性能与资源消耗之间找到平衡点。
pymysql读取
### 如何使用 PyMySQL 进行数据库读取操作
为了执行数据库读取操作,PyMySQL 提供了多种方式来获取数据。下面是一个完整的例子展示如何通过 PyMySQL 执行简单的 SELECT 查询并打印结果。
#### 建立连接
建立到 MySQL 数据库的连接是第一步,在此过程中可以指定主机名、用户名、密码以及其他必要的参数:
```python
import pymysql
connection = pymysql.connect(
host='localhost',
user='root',
password='your_password',
database='test_db'
)
```
#### 创建游标对象
创建一个游标对象用于执行 SQL 语句。这里可以选择不同的游标类,比如 `SSCursor` 可以用来流式读取大数据集而不加载整个结果集到内存中[^3]。
```python
with connection.cursor(pymysql.cursors.DictCursor) as cursor:
pass # 后续代码将在此处编写
```
#### 编写和执行查询
定义要执行的 SQL 查询字符串,并调用游标的 execute 方法运行该查询:
```sql
query = "SELECT id, name FROM users WHERE age >= %s"
cursor.execute(query, (21,))
```
注意这里的占位符 `%s` 和传递给 `execute()` 的元组 `(21,)` 是安全的方式来防止SQL注入攻击[^4]。
#### 获取查询结果
有几种方法可以从游标中检索返回的数据;最常用的是 fetchone(), fetchall() 或者迭代器模式:
- **fetchone**: 返回单条记录作为字典(如果指定了 DictCursor),如果没有更多记录则返回 None.
- **fetchall**: 将所有匹配的结果一次性取出作为一个列表.
对于大容量数据推荐采用逐行处理的方式以节省资源消耗:
```python
for row in cursor.fetchall():
print(f"ID: {row['id']}, Name: {row['name']}")
```
或者更高效地遍历大量数据时可使用 SSCursor 并配合循环逐步提取每一行直到结束:
```python
while True:
record = cursor.fetchone()
if not record:
break
print(record)
```
#### 关闭连接
完成所有的数据库交互之后应当关闭游标及连接以释放资源:
```python
cursor.close()
connection.close()
```
综上所述即为利用 PyMySQL 实现基本的数据库读取功能的方法概览。
阅读全文
相关推荐















