- SQLAlchemy 教程
- SQLAlchemy - 首頁
- SQLAlchemy - 簡介
- SQLAlchemy Core
- 表示式語言
- 連線資料庫
- 建立表
- SQL 表示式
- 執行表示式
- 選擇行
- 使用文字 SQL
- 使用別名
- 使用 UPDATE 表示式
- 使用 DELETE 表示式
- 使用多個表
- 使用多表更新
- 引數有序更新
- 多表刪除
- 使用連線
- 使用連線詞
- 使用函式
- 使用集合操作
- SQLAlchemy ORM
- 宣告對映
- 建立會話
- 新增物件
- 使用 Query
- 更新物件
- 應用過濾器
- 過濾器運算子
- 返回列表和標量
- 文字 SQL
- 構建關係
- 處理相關物件
- 使用連線
- 常見的關聯運算子
- 急切載入
- 刪除相關物件
- 多對多關係
- 方言
- SQLAlchemy 有用資源
- SQLAlchemy - 快速指南
- SQLAlchemy - 有用資源
- SQLAlchemy - 討論
SQLAlchemy ORM - 更新物件
本章我們將學習如何修改或更新表中所需的值。
要修改任何物件的某個屬性的資料,我們必須為其分配新值並提交更改以使更改持久化。
讓我們從主鍵識別符號為 2 的 Customers 表中提取一個物件。我們可以使用會話的 get() 方法,如下所示:
x = session.query(Customers).get(2)
我們可以使用以下程式碼顯示所選物件的內容:
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
從我們的客戶表中,應該顯示以下輸出:
Name: Komal Pande Address: Koti, Hyderabad Email: komal@gmail.com
現在我們需要更新 Address 欄位,並分配如下所示的新值:
x.address = 'Banjara Hills Secunderabad' session.commit()
更改將持久地反映在資料庫中。現在我們使用**first() 方法**獲取表中第一行的對應物件,如下所示:
x = session.query(Customers).first()
這將執行以下 SQL 表示式:
SELECT customers.id AS customers_id, customers.name AS customers_name, customers.address AS customers_address, customers.email AS customers_email FROM customers LIMIT ? OFFSET ?
繫結引數分別為 LIMIT = 1 和 OFFSET = 0,這意味著將選擇第一行。
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
現在,以上程式碼顯示第一行的輸出如下:
Name: Ravi Kumar Address: Station Road Nanded Email: ravi@gmail.com
現在更改 name 屬性並使用以下程式碼顯示內容:
x.name = 'Ravi Shrivastava'
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
以上程式碼的輸出為:
Name: Ravi Shrivastava Address: Station Road Nanded Email: ravi@gmail.com
即使顯示了更改,它也沒有提交。您可以使用以下程式碼中的**rollback() 方法**保留之前的持久位置。
session.rollback()
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
將顯示第一條記錄的原始內容。
對於批次更新,我們將使用 Query 物件的 update() 方法。讓我們嘗試在每一行(ID != 2 除外)的 name 前新增字首“Mr.”。相應的 update() 語句如下:
session.query(Customers).filter(Customers.id! = 2).
update({Customers.name:"Mr."+Customers.name}, synchronize_session = False)
update() 方法需要兩個引數,如下所示:
一個鍵值對字典,鍵是要更新的屬性,值是屬性的新內容。
synchronize_session 屬性,用於說明更新會話中屬性的策略。有效值為 false:不同步會話;fetch:在更新前執行 select 查詢以查詢與更新查詢匹配的物件;evaluate:對會話中的物件評估條件。
表中的四行中有三行將以“Mr.”為 name 字首。但是,更改未提交,因此不會反映在 SQLiteStudio 的表檢視中。只有在我們提交會話時才會重新整理。