db.refresh()的重復使用和db.rollback()

db.refresh()

在 SQLAlchemy 中,db.refresh()?用于從數據庫中重新加載對象的狀態,確保對象屬性與數據庫中的實際數據保持一致。下面詳細介紹其使用場景和作用:

1.獲取數據庫生成的值

當數據庫自動生成字段(如自增 ID、默認值、觸發器計算的值)時,refresh?可獲取這些值:

user = User(name="Alice")
db.add(user)
db.commit()
db.refresh(user)  # 獲取數據庫分配的自增 ID
print(user.id)    # 此時 ID 已從數據庫加載
2.?確保讀取最新數據

若其他事務可能修改了數據,可通過?refresh?強制獲取最新狀態:

# 用戶 A 修改了數據
# 用戶 B 需要獲取最新狀態
db.refresh(user)
print(user.status)  # 獲取數據庫中最新的狀態
3.?處理數據庫觸發器或默認值

當字段由數據庫觸發器或默認值自動填充時:

class Order(Base):__tablename__ = "orders"id = Column(Integer, primary_key=True)created_at = Column(DateTime, server_default=func.now())  # 數據庫默認值order = Order()
db.add(order)
db.commit()
db.refresh(order)  # 獲取數據庫生成的 created_at
print(order.created_at)  # 顯示數據庫實際生成的時間

為何不需要?db.refresh()

  1. 提交后對象已同步
    db.commit()?會將所有掛起的更改寫入數據庫,并更新對象狀態。因此,提交后對象屬性已經反映了最新值,無需刷新。

  2. 無外部修改
    任務在單個事務中執行,且沒有其他進程或線程修改同一對象,因此對象狀態始終是一致的。

  3. refresh?的適用場景
    db.refresh()?主要用于以下情況:

    • 讀取數據庫生成的值(如自增 ID、默認值)。

    • 確認其他事務對數據的修改。

    • 強制刷新延遲加載的關聯對象。

?適用場景:

1.讀取數據庫生成的值,比如自增ID

2.有外部修改需要刷新確認,比如有其他進程修改同一對象。


db.rollback()

db.rollback()?回滾范圍:

  1. 最近一次?db.commit()?之后(如果有提交過)。
  2. 事務開始點(如果從未提交)。

解釋:

db.rollback()?的回滾范圍取決于數據庫事務的邊界和當前會話的狀態。具體來說,它會撤銷自當前事務開始以來所有未提交的數據庫操作。

在關系型數據庫中,事務是一組不可分割的操作序列,要么全部成功,要么全部失敗。db.rollback()?的作用是:

  1. 撤銷未提交的更改:將數據庫狀態恢復到事務開始前的狀態。
  2. 釋放事務鎖:如果操作涉及鎖(如寫操作),回滾后會釋放這些鎖。
  3. 清空會話緩存:SQLAlchemy 會話中未提交的對象更改會被丟棄。

db.rollback():

  • 每次?db.commit()?后:事務結束,數據已永久保存,后續的?db.rollback()?不會影響已提交的數據。
  • 異常發生時db.rollback()?會撤銷自最近一次提交以來的所有操作。

例子:

1.如果在第一次?db.commit()?之前發生異常(例如查詢失敗):回滾到事務開始點(無實際影響,因為尚未提交任何更改)。
2. 如果在第一次?db.commit()?之后、第二次?db.commit()?之前發生異常(例如?get_markdown?失敗):回滾?structure?的更新和?status=success?的更改,但?status=running?已提交,不受影響。
3.如果在第二次?db.commit()?之后發生異常(幾乎不可能,因為已返回):不會觸發此回滾。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89752.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89752.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89752.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《Web安全之機器學習入門》讀書筆記總結

目錄 一、案例總結 1、基礎知識 (1)第1章 通向智能安全的旅程 (2)第2章 打造機器學習工具箱 (3)第3章 機器學習概述 (4)第4章 Web安全基礎 2、安全案例 (1&#…

github 近期熱門項目-2025.7.20

github 近期熱門項目-2025.7.20 GitHub 上近期熱門或趨勢項目的信息可以從多個來源獲取,包括 GitHub Trending 頁面、技術社區推薦、以及各大技術媒體的報道。以下是一些近期在 GitHub 上備受關注的項目類別和示例: 1. AI 與機器學習項目 隨著 AI 技術的快速發展,許多開源…

使用Python清理Excel中的空行和單元格內部空行:初學者指南

前言 作為數據處理人員或辦公室工作者,你可能經常遇到Excel文件中存在多余空行或單元格內有多余空行的問題。這些不必要的空白會影響數據的美觀性,更重要的是會給后續的數據分析、合并或處理帶來麻煩。本文將介紹一個簡單的Python腳本,幫助你高效地解決這些問題。 很多工具…

華為歐拉系統(openEuler)安裝 Docker 容器完整教程

🔥 前言:在國產化操作系統日益普及的當下,華為歐拉系統(openEuler)憑借其穩定性和安全性受到不少用戶青睞。但 Docker 官方暫未提供對 openEuler 的原生支持,不過好在 openEuler 與 CentOS 底層架構兼容&am…

數據結構--JDK17新增語法和順序表

一.yield關鍵字用于switch語句上的case代碼塊的返回值舉例:二.var關鍵字作用:當類型名字較長時可以簡化代碼。注意事項:1.不能使用var來聲明字段2.不能使用var來聲明方法參數3.不能使用var來聲明方法返回類型4.使用時必須初始化,但…

1 滲透基礎

目錄 基礎前沿 1 vulhub環境搭建 1 proxychains工具:編輯配置文件 2 docker docker環境搭建 配置docker的代理: 2 nginx編譯安裝--FPM 1 php.ini 2 php-fpm 3 nginx 4 nginx php-fpm php 1 基本角色分工 2. 請求處理全流程 步驟 1&#xff…

基于Java+SpringBoot 的榆林特色旅游網站

源碼編號:S678源碼名稱:基于SpringBoot 的榆林特色旅游網站用戶類型:雙角色,用戶、管理員數據庫表數量:22 張表主要技術:Java、Vue、ElementUl 、SpringBoot、Maven運行環境:Windows/Mac、JDK1…

Python設計模式深度解析:單例模式(Singleton Pattern)完全指南

Python設計模式深度解析:單例模式(Singleton Pattern)完全指南前言什么是單例模式?單例模式的三個關鍵要素基礎實現:異常控制式單例Python中的經典單例實現1. 使用 __new__ 方法實現2. 線程安全的單例實現3. 裝飾器實現…

LVS 原理詳解及部署(包含實驗案例)

一、集群和分布式簡介1.系統性能擴展方式Scale Up(向上擴展):通過增強單臺服務器的硬件性能(如提升 CPU、內存、存儲等)來提高處理能力,適用于業務初期或對單點性能要求高的場景。這種方式簡單易行&#xf…

兩個路由器通過不同的網段互聯

一,實驗拓撲圖:二、實驗說明 :在兩個接口配置好兩個不同網段的的ip地址后是不能相互通信的。經過測試用ospf把兩個網段宣告進area 0 是行不通的。最后我們通過靜態路由來配置,遇到一個最大的問題是,我們的下一跳地址應…

Python趣味算法:冒泡排序——從理論到極致優化

排序算法是程序員的必修課,而冒泡排序是理解算法思維的絕佳起點。本文將深入解析冒泡排序的7種優化技巧,通過可視化演示+多維度性能分析,帶你徹底掌握這一經典算法! 看在每天堅持分享有趣知識的份上,點個關注吧(づ ̄ 3 ̄)づ 關注是我更新的動力 ̄︶ ̄? ̄︶ ̄?) 作者會…

[simdjson] document_stream | iterate_many() | batch_size | 線程加速 | 輕量handle

第七章:文檔流 歡迎回來 在前面的章節中,我們學習了如何使用解析器結合填充字符串獲取表示JSON根節點的文檔,并通過按需API(On-Demand API)遍歷值、對象和數組,同時使用simdjson_result進行錯誤處理。 到…

【機器學習】向量數據庫選型指南:企業內網部署場景

向量數據庫選型指南:企業內網部署場景一、選型背景與關鍵需求 在企業級機器學習應用中,特別是涉及圖片、視頻等非結構化數據的場景,向量數據庫已成為核心基礎設施。傳統數據庫難以高效處理高維向量的相似度檢索需求(如圖片相似性搜…

Django母嬰商城項目實踐(八)- 數據渲染與顯示之首頁

8、數據渲染與顯示 1 概述 Django作為Web框架,需要一種很便利的方法動態地生成HTML網頁,因此有了模板這個概念。模板包含所需HTML的部分代碼以及一些特殊語法,特殊語法用于描述如何將視圖傳遞的數據動態插入HTML網頁中。 Django可以配置一個或多個模板引擎(甚至是0個,如前…

Redis常見線上問題

文章目錄 Redis常見線上問題 引言 報告背景與目的 Redis版本與環境說明 性能瓶頸問題 慢查詢分析與優化 高CPU與網絡延遲 內存管理問題 內存碎片成因與優化 BigKey與內存溢出 數據一致性與高可用問題 主從同步延遲 腦裂問題與解決方案 持久化機制問題 RDB與AOF對比 核心特性對比…

Typecho博客集成阿里云CDN+OSS實現全站加速方案

文章目錄 Typecho博客系統集成阿里云CDN和OSS實現靜態資源加速 引言 一、技術選型與準備工作 1.1 為什么選擇阿里云CDN+OSS組合 1.2 準備工作 二、OSS存儲桶創建與配置 2.1 創建OSS存儲桶 2.2 配置Bucket權限 2.3 配置跨域訪問(CORS) 三、CDN加速配置 3.1 添加CDN域名 3.2 配置…

計算機畢業設計Java網咖管理系統 Java技術實現的網咖綜合管理系統開發 基于Spring Boot框架的網咖運營管理系統設計

計算機畢業設計Java網咖管理系統e0btvq7l (配套有源碼 程序 mysql數據庫 論文)本套源碼可以先看具體功能演示視頻領取,文末有聯xi 可分享隨著互聯網技術的飛速發展和電子競技的全球興起,網咖作為一種新興的休閑娛樂場所&#xff0…

Kotlin main函數

main() 函數 來仔細看看 main() 函數。實際上,它就是一個很常見的函數:你可以對它做任何你能對普通函數做的事。唯一的不同是:它是程序的入口點(entry point)。這意味著程序的執行從調用這個函數開始。 我們來拆解一下…

深入理解 Spring:事務管理與事件機制全解析

文章目錄前言一、Spring 事務管理(Transaction Management)1. 使用 Transactional 管理事務2. 核心屬性說明3. 事務傳播行為詳解(Propagation)4. 異常回滾策略分析5. 底層原理剖析(源碼級)二、Spring 事件機…

AWD練習的平臺搭建

ubuntu虛擬機搭建 前提資源準備 進行AWD我們需要在一個獨立的虛擬機 現在就來搭建一個ubuntu的 這里我們使用的VMware是17的 然后下載鏡像的地址:Ubuntu最全的國內鏡像下載地址 - 嗶哩嗶哩 我下載的是中科大的 這里需要準備的前提資源就有了。 創建Ubuntu虛…