你記得的應該是 Django 的 transaction (事務) / atomic 機制。我幫你拆開來說:
為什麼「跑到一半斷線」會歸零
在 Django 裡,如果你用 transaction.atomic(),它會把整段資料庫操作包在一個 事務 (transaction) 之中。
成功跑完 → 整個 transaction 一次提交 (commit)。
中途錯誤或斷線 → 整個 transaction 回滾 (rollback),就像什麼都沒發生。
這就是為什麼你看到「跑到一半斷線,他就會歸 0」。
工具 / 功能名稱
transaction.atomic() → 最常用的,確保操作要嘛全有要嘛全無。
@transaction.atomic → 可以加在函式上,效果一樣。
savepoint → 原子區塊內還可以再切小段,用來部分回滾。
類似的延伸工具
django-transaction-hooks(外掛套件): 可以在 transaction commit 後掛勾做後續事。
Celery 任務 + 交易邏輯: 如果你要「斷線後重試」,常見做法是把中間狀態存起來,交給 Celery 重跑。
所以如果你要避免「什麼都歸零」,就要自己設計「中途狀態儲存機制」(例如:在資料庫裡寫一個 progress 表),而不是完全依靠 transaction。Django transaction 本身的理念就是 一致性高於中途結果。