gpt4 book ai didi

python - 如何使用 MySQLdb 在 django 中创建回滚按钮?

转载 作者:行者123 更新时间:2023-11-29 14:59:08 25 4
gpt4 key购买 nike

我想使用 MySQLdb 在我的 django 项目中创建一个回滚按钮。我尝试使用 commit() 和 rollback() 与 InnoDB 作为数据库引擎,rollback() 似乎不起作用,因为即使 rollback() 放在 commit() 之后,数据库也已更新。以下是 python 代码中的一些相关行:

def update(request):

if 'weight' in request.GET and request.GET['weight']:
weight = request.GET['weight']
else:
return HttpResponseRedirect('/clamplift/')

if 'realtag' in request.GET and request.GET['realtag']:
realtag = request.GET['realtag']
else:
return HttpResponseRedirect('/clamplift/')

conn = MySQLdb.Connect(host="localhost", user="root", passwd="", db="scale")
cur = conn.cursor()
cur.execute("UPDATE `scale`.`scale_stock` SET `current_weight` = %s WHERE `scale_stock`.`paper_roll_id` = %s", (weight,realtag))
conn.commit()

conn.rollback() # I test rollback() function here.

cur.close()
conn.close()

return HttpResponseRedirect('/clamplift/')

实际上我想要一个按钮用于将数据更新到数据库,另一个按钮用于回滚(例如提供撤消功能)。

请给我任何想法。非常感谢。

最佳答案

我没有直接使用 MySQLdb 的经验,但大多数时候,回滚方法仅在事务期间有效。也就是说,如果事务仍然处于打开状态,则回滚将撤消自事务开始以来发生的所有事情。因此,当您调用 commit 时,您将结束事务,并且无法再有意义地调用 rollback

回答评论中的问题:

向模型添加日期时间字段以跟踪修订。创建另一个模型,其字段与原始模型相同,并在原始模型的表中添加外键。当原始模型发生更新时,将旧值复制到新表中,将日期时间设置为 NOW 并将修订表中的外键设置为指向正在编辑的行,然后再执行更新。然后,您可以通过选择相关行的所有修订并让用户根据日期时间进行选择,提供要恢复到的先前状态的列表。当然,您还可以提供进行编辑的用户或您认为对您的应用用户有用的其他特定信息。

关于python - 如何使用 MySQLdb 在 django 中创建回滚按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3757266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com