使用MySQL Connector将MySQL表数据保存为Python字典的问题
解决MySQL查询结果仅最后一行存入字典的问题
你遇到的问题很典型——每次循环都直接替换了整个字典,而不是往里面添加新的键值对。咱们一步步来修正:
问题根源
你的循环里写了f = {row["JT"]: row ["f"]},这意味着每遍历一行数据,就会创建一个全新的字典赋值给f,之前存的内容都会被覆盖,最后自然只剩最后一行的数据啦。
修正方案
要把每一行的键值对添加到同一个字典中,有两种简单的方式:
方式1:直接通过键赋值
直接用f[row["JT"]] = row["f"],这样每次循环都会把当前行的JT作为键,f字段的值作为值,添加到已有的字典f里:
方式2:使用字典的update()方法
调用f.update({row["JT"]: row["f"]}),同样可以把新的键值对合并到字典中。
还要修正的语法错误
除了字典赋值的问题,你的代码还有两处语法错误:
- SQL语句中表名用了单引号
'test',MySQL里表名应该用反引号`test`(或者如果表名没有特殊字符,直接写test也行),单引号是用来包裹字符串常量的,用在表名上会导致SQL执行失败。 - Python3中
print f是过时的写法,需要改成print(f)。
完整修正后的代码
import mysql.connector # 建立数据库连接 conn = mysql.connector.connect(user="F", password="", host="localhost", db="f") # 使用dictionary=True让查询结果返回字典格式 mycursor = conn.cursor(dictionary=True) # 修正表名的引号问题 query = "SELECT * FROM `test`" mycursor.execute(query) # 初始化空字典 f = {} # 遍历查询结果,逐个添加键值对 for row in mycursor: # 方式1:直接键赋值(推荐,更直观) f[row["JT"]] = row["f"] # 方式2:用update的话可以替换成下面这行 # f.update({row["JT"]: row["f"]}) print(f) # 现在每次打印都会看到字典在逐步添加内容 # 别忘了关闭游标和连接(好习惯) mycursor.close() conn.close()
这样修改后,所有行的JT和f字段的键值对都会被存入同一个字典f中啦。如果JT字段有重复值,后面的行会覆盖前面的,这点需要注意哦~
内容的提问来源于stack exchange,提问作者Angriffskeule
相关产品推荐
相关产品推荐

