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

标签 python mysql django

我想使用 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/

相关文章:

python - 测试电子邮件发送? -Python/Django

python - 如何在 View 中使用Django缓存而不缓存所有页面

python - Pandas - 在同一列中格式化不同格式的日期列

python - 如何使用 python3 -i 加载脚本,但没有 name == main run?

php - 获取信息的两个查询

php - 加速 Polymer Dart 的最佳实践?

python - 使用 slugs 和基于类的 View 时无法找到 View

python - 如何使用NameError在Python中定义变量

MySQL 导出到输出文件 : CSV escaping chars

Django/Pyodbc/Apache - 使用 Apache 时出现连接错误