You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中实现类似Rails console --sandbox的数据库回滚Shell?

Django中实现类似Rails Sandbox Console的数据库回滚功能

当然可以!Django虽然没有内置和rails console --sandbox完全一模一样的命令,但我们可以通过两种简单的方式实现仅数据库操作自动回滚的需求,完全满足你测试数据库修改的场景:

方法一:用django-extensions的shell_plus --sandbox(最省心)

如果你已经装了django-extensions(很多Django开发者都会用这个工具集,它还带了一堆实用功能),直接跑这条命令就行:

python manage.py shell_plus --sandbox

启动后,所有数据库操作都会被包裹在一个事务里——不管你创建、更新还是删除记录,只要退出Shell,整个事务就会自动回滚,真实数据库里不会留下任何痕迹,和Rails的sandbox体验几乎完全一致。

方法二:手动在默认Django Shell里实现(无需额外安装)

如果不想加新依赖,也能手动搞定:

  1. 先启动普通的Django Shell:
python manage.py shell
  1. 进入Shell后,手动开启一个原子事务,并且设置退出时自动回滚:
from django.db import transaction

# 开启事务
txn = transaction.atomic()
txn.__enter__()

# 接下来随便造数据就行,比如:
from your_app.models import YourModel
test_obj = YourModel(field="测试内容")
test_obj.save()

# 不管是手动调用回滚还是直接退出Shell,都会撤销所有操作
# 手动回滚可以用:txn.__exit__(None, None, None)

当你退出Shell时,这个未提交的事务会自动触发回滚,所有测试操作都不会影响真实数据库。

小提醒

这两种方式都只处理数据库操作的回滚,不会限制网络请求或其他外部调用,完全符合你只需要基础数据库回滚的需求。要是你经常用这个功能,强烈推荐装django-extensions,shell_plus平时开发还能自动导入所有模型,省不少事~

内容的提问来源于stack exchange,提问作者Ender

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:25:34