python - 如何在 SQLAlchemy,Python 中使用 JSON 将更新后的数据和更新前的数据插入到表中?
问题描述
我想显示原始数据和修改后的数据之间的区别,在尝试了很多方法之后,我们决定将更新后的数据和更新前的数据插入到一个history_table
用 JSON 调用的表中。
如何将更改的字典和更新的字典插入下表?
# table of `history_table`
before_updated updated updated_time
json of before_updated json of updated datetime
下面的代码将更新来自不同表的 15 行(示例代码只有一个表),所以需要更改和保存很多表,我被困了很多天,非常感谢任何建议。
class GetTestDetail(Resource):
args = self.test.parse_args()
print(args)
id = args.get("id")
def get(self):
# get something
data = db.session.query(Test.name, Test.days).filter(Test.id == id).first()
return dict(data=data)
def put(self):
# change something
args = self.test.parse_args()
test = args.get("test")
dict_test = db.session.query(Test).filter_by(id=id).first()
test["name"] = 'Alice'
test["days"] = 12
{setattr(dict_test, k, v) for k, v in test.items()}
db.session.commit()
return {"status": True, "message": "Successfully"}
except Exception as e:
db.session.rollback()
return {"status": False, "message": "Failed"}
解决方案
我认为您的问题与代码无关。首先是理解逻辑或选择一种方法,然后你就可以编写代码了。
一个简单的方法是有两个表 - 一个用于“新数据”(您的历史表),另一个用于“当前数据”。
“新数据”中的每一行都有“更改编号”、“创建日期时间”列和一个链接到“当前数据”中主键的列(外键)。如果您想使用一个表来处理多个表的历史记录,那么您还可以有一列来指示该记录是针对哪个表的。例如,如果您有不同的客户表、订单表、订单详细信息表,那么这些值将出现在列中(比如我们称之为 primary_table_name)
a) 一个全新的记录将首先进入“当前数据”表。之后,您在“新数据”表中创建一个更改编号为 0 的条目,它引用“当前数据”表中的主键。每当您看到更改编号 0 时,您就知道它指的是该对象的第一个条目(记录)。
b)后续更改将首先进入“新数据”,然后您增加更改编号计数。请注意,这将是不同的行(您不会覆盖以前的记录)。然后在保存到“新数据”后,将其复制到“当前数据”并覆盖那里的行。
从本质上讲,您的“当前数据”表将始终包含最新记录,并且是您提取数据以显示给用户的地方。如果用户随后想要查看特定记录的历史记录,您只需转到历史记录表并提取该记录的所有更改编号 > 1 的行。您可以使用单独的代码来计算记录之间的差异
推荐阅读
- android - 在反应原生更改设备语言后,日期选择器变得空白?
- css - css暗模式的自动变化是什么?
- node.js - 将 Bot Framework v4 机器人连接到 nodejs 中的 Power Virtual Agent 机器人
- python - 如何使用 Python 将仅出现一次的单词替换为文本文件中的其他单词?
- autodesk-forge - 在 Forge Viewer 上按 Escape 键时无法返回“bimwork”模式
- python - Python Tkinter 在其前面显示带有 Hi 的名称
- java - 为什么 return 语句在 if 语句中不起作用?
- visual-studio-code - VS Code yarn install 错误:命令:node-gyp rebuild,目录:/vscod/node_modules/native-watchdog
- python - 如何计算矩阵的 R2/Q2
- php - 2 列 DIV/分类表 - Woocommerce