如何在Python中为JSON的daysOff属性追加新值并更新MySQL
问题分析与解决方案
核心问题
你的代码存在关键错误:daysOff是数组(列表)类型,但你用dict[key]=test_dict直接将其替换成了单个字典,而非往数组中添加新元素。
修正步骤
- 修复
checkKey函数:对daysOff列表使用append()方法添加新假期对象,而非直接赋值覆盖。 - 修正代码缩进:原代码
try块缩进错误,需对齐。 - 避免变量名冲突:不要用
dict作为参数名(会覆盖Python内置的dict类型),改用my_dict。 - 添加数据库更新逻辑:将修改后的字典转回JSON字符串,执行UPDATE语句写回数据库。
修正后的完整代码
import mysql.connector as mysqlConnector import json # 先建立数据库连接(需替换为你的实际配置) db = mysqlConnector.connect( host="你的数据库地址", user="你的用户名", password="你的密码", database="你的数据库名" ) cur = db.cursor() query = "SELECT option_value FROM my_tbl WHERE option_name='my_holiday_settings'" update_query = "UPDATE my_tbl SET option_value = %s WHERE option_name='my_holiday_settings'" try: cur.execute(query) myresult = cur.fetchall() for x in myresult: # 解析JSON字符串为Python字典 dictionary = json.loads(x[0]) key = 'daysOff' checkKey(dictionary, key) # 将修改后的字典转回JSON字符串,准备更新数据库 updated_json = json.dumps(dictionary) # 执行更新操作 cur.execute(update_query, (updated_json,)) # 提交事务 db.commit() print("更新后的数据:", dictionary) except Exception as e: print('错误:', e) # 出错时回滚事务,避免数据不一致 db.rollback() finally: cur.close() db.close() def checkKey(my_dict, key): if key in my_dict: # 定义新的假期对象 new_holiday = {"name":"test","startDate":"9999-01-01","endDate":"9999-09-09","repeat":False} # 往daysOff列表中添加新元素 my_dict[key].append(new_holiday) print("已添加新假期") else: print("daysOff键不存在")
关键说明
my_dict[key].append(new_holiday):因为daysOff对应的值是列表,所以用append方法在末尾添加新的字典元素。json.dumps(dictionary):将修改后的Python字典转回JSON格式字符串,用于更新数据库。- 数据库操作必须提交事务(
db.commit()),出错时需回滚(db.rollback()),防止数据异常。 - 原代码中
print(dict)是错误操作,应打印自定义的dictionary变量。
内容的提问来源于stack exchange,提问作者Kahlil N
相关产品推荐
相关产品推荐

