TinyDB - 更新資料 (upsert)



我們討論了更新插入查詢,但有時我們需要同時進行更新和插入操作。在這種情況下,TinyDB 提供了獨特的upsert查詢。此查詢幫助我們根據條件同時插入和更新資料。它的工作方式如下:

  • 如果資料存在,則選擇更新操作。

  • 如果資料不存在,則選擇插入操作。

語法

upsert查詢的語法如下:

db.upsert({ 'key' : 'value', 'logged - in' : True}, regular expression)

讓我們通過幾個例子來演示如何在 TinyDB 中使用upsert查詢。我們將使用前面章節中使用過的相同的學生資料庫。

示例 1

讓我們看看如何使用upsert查詢將學號為 2 的學生的地址更改為“Surat”。在這種情況下,我們有一個匹配的使用者,因此它將更新地址並將登入狀態設定為 True:

from tinydb import TinyDB, Query
db = TinyDB('student.json')
db.upsert({'address':'Surat'}, Query().roll_number==2)

這將產生以下輸出,這意味著記錄編號“2”已更新。

[2]

使用以下程式碼驗證記錄編號“2”是否已更新:

db.get(doc_id=2)

它將顯示更新後的資料:

{
   'roll_number': 2,
   'st_name': 'Ram',
   'mark': [250, 280],
   'subject': ['TinyDB', 'MySQL'],
   'address': 'Surat'
}

示例 2

讓我們看看如何在表中對不存在的資料使用upsert查詢:

from tinydb import TinyDB, Query
db = TinyDB('student.json')
db.upsert({'E-mail':'ram@gmail.com','logged-in': True},
Query().roll_number==2)

它將顯示以下輸出,這意味著 ID 為“2”的文件已更新。

[2]

使用以下程式碼驗證更新後的值:

db.get(doc_id=2)

它將產生以下輸出:

{
   "roll_number":2,
   "st_name":"Ram",
   "mark":[
      250,
      280
   ],
   "subject":[
      "TinyDB",
      "MySQL"
   ],
   "address":"Surat",
   "logged-in":true,
   "E-mail":"ram@gmail.com"
}

請注意,我們使用upsert查詢建立了一個新的鍵(E-mail),它之前不存在,併為其提供了值“ram@gmail.com”。

廣告
© . All rights reserved.