Python Flask API如何将CRUD操作数据永久保存到JSON文件
问题原因
你当前的实现仅在程序启动时将MOCK_DATA.json的内容加载到内存的finances列表中,后续所有增删改操作都是修改内存中的变量,并没有将变更写回磁盘的JSON文件。程序停止运行后内存数据被释放,重启时会重新读取原始JSON文件,因此修改无法保留。
解决方案
步骤1:新增持久化工具函数
在加载finances的代码之后,新增一个公共函数,用于将内存中的最新数据写回JSON文件:
import json # 你原有读取文件的代码 with open('MOCK_DATA.json', encoding='utf-8') as data_file: finances = json.loads(data_file.read()) # 新增的保存函数 def save_finances_to_file(): with open('MOCK_DATA.json', 'w', encoding='utf-8') as f: # indent=2 保持JSON格式化便于阅读,ensure_ascii=False 避免中文乱码 json.dump(finances, f, indent=2, ensure_ascii=False)
步骤2:在所有修改数据的接口中调用保存函数
分别在post、put、delete方法完成对finances的修改后,调用上面的保存函数:
post方法修改
在finances.append(person)之后加一行调用代码:
finances.append(person) save_finances_to_file() # 新增持久化代码 return finances, 201
put方法修改
两处修改finances的位置之后都需要添加调用:
第一处是修改已有用户信息之后:
person["credit_limit"] = args["credit_limit"] save_finances_to_file() # 新增持久化代码 return person, 200
第二处是新增用户append之后:
finances.append(person) save_finances_to_file() # 新增持久化代码 return person, 201
delete方法修改
在重新给finances赋值之后添加调用:
global finances finances = [person for person in finances if person["id"] != id] save_finances_to_file() # 新增持久化代码 return f"Person with id {id} is deleted.", 200
注意事项
- 若后续有高并发请求需求,直接读写JSON文件会存在冲突问题,业务量上升后建议切换到SQLite等轻量数据库做持久化
- 可以定期备份JSON文件,避免写操作异常导致文件损坏丢失所有数据
内容的提问来源于stack exchange,提问作者st123
相关产品推荐
相关产品推荐

