You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环中字典值被覆盖求助:pymysql读取MySQL数据异常

问题分析与解决方案

嘿,这个问题我之前也踩过坑!核心原因其实是DictCursor返回的行对象是同一个字典的引用——每次循环迭代时,它只是把当前行的数据更新到这个字典里,而不是生成一个全新的字典。如果你直接把这个行对象添加到列表里,列表里的所有元素最终都会指向同一个字典,自然最后显示的全是最后一行的数据。

举个你可能正在用的错误代码例子:

import pymysql.cursors

# 连接数据库
conn = pymysql.connect(
    host="你的主机",
    user="用户名",
    password="密码",
    db="数据库名",
    cursorclass=pymysql.cursors.DictCursor
)

data = []
try:
    with conn.cursor() as cursor:
        cursor.execute("SELECT * FROM your_table")
        for row in cursor:
            print(row)  # 这里打印的是当前循环的正确数据
            data.append(row)  # 错误:直接添加同一个字典引用
    print(data)  # 这里会看到两个元素都是最后一行的数据
finally:
    conn.close()

解决方法很简单,每次循环时复制行对象的内容到新字典里:

有几种常用的方式:

  1. 使用字典的copy()方法(浅拷贝,适合没有嵌套结构的行数据):
data.append(row.copy())
  1. 用dict()构造函数重新生成字典:
data.append(dict(row))
  1. 如果你的行数据里有嵌套的字典或列表,需要用深拷贝(导入copy模块):
import copy
data.append(copy.deepcopy(row))

这样修改后,列表里的每个元素都是独立的字典对象,不会被后续循环的内容覆盖,最后print(data)就能看到两条正确的不同数据啦!

内容的提问来源于stack exchange,提问作者user3605780

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:25:15