TINYDB USEFUL RESOURCES
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Upserting dữ iệu trong TinyDB

Trong TinyDB, bên cạnh các truy vấn cập nhật (update) và chèn dữ liệu (insert), đôi khi chúng ta cần sự kết hợp của cả hai thao tác. Đó là lúc truy vấn upsert xuất hiện như một giải pháp hoàn hảo. Truy vấn này cho phép chèn và cập nhật dữ liệu cùng lúc dựa trên một điều kiện cụ thể. Nó hoạt động theo hai cách:

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
  • Nếu dữ liệu đã tồn tại, thì nó sẽ thực hiện thao tác cập nhật.
  • Nếu dữ liệu không tồn tại, thì nó sẽ thực hiện thao tác chèn mới.

Cú pháp của truy vấn upsert trong TinyDB

db.upsert({ 'key' : 'value', 'logged-in' : True}, điều kiện)

Dưới đây là một số ví dụ minh họa cách sử dụng truy vấn upsert trong TinyDB. Chúng ta sẽ tiếp tục làm việc với cơ sở dữ liệu sinh viên đã sử dụng trong các chương trước.

Ví dụ 1

Trong ví dụ này, chúng ta sẽ sử dụng truy vấn upsert để thay đổi địa chỉ của một sinh viên có roll_number là 2 thành "Surat". Vì có sinh viên với số thứ tự 2 trong cơ sở dữ liệu, nên thao tác sẽ cập nhật địa chỉ và đánh dấu trạng thái đăng nhập (logged-in)True.

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

Sau khi thực hiện, TinyDB sẽ trả về kết quả cho biết bản ghi với ID2 đã được cập nhật:

Bài viết này được đăng tại [free tuts .net]

[2]

Chúng ta có thể xác nhận lại bằng cách truy vấn để lấy dữ liệu của bản ghi số 2 như sau:

db.get(doc_id=2)

Dữ liệu cập nhật sẽ hiển thị như sau:

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

Ví dụ 2

Trong ví dụ này, mình sẽ sử dụng truy vấn upsert để thêm dữ liệu mới cho một sinh viên không có trong bảng dữ liệu. Chúng ta sẽ thêm trường E-mail và cập nhật trạng thái đăng nhập (logged-in) của sinh viên có roll_number là 2.

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

Kết quả trả về cho thấy bản ghi số 2 đã được cập nhật:

[2]

Chúng ta có thể xác nhận lại bằng cách truy vấn dữ liệu của bản ghi số 2 như sau:

db.get(doc_id=2)

Dữ liệu cập nhật sẽ hiển thị như sau:

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

Lưu ý rằng chúng ta đã sử dụng truy vấn upsert để tạo mới một trường E-mail không tồn tại trước đó và gán giá trị là ram@gmail.com.

Kết bài

Truy vấn upsert là một tính năng mạnh mẽ và tiện lợi trong TinyDB, giúp giảm bớt sự phức tạp khi xử lý các tình huống cần phải vừa cập nhật vừa thêm dữ liệu mới. Điều này đặc biệt hữu ích khi làm việc với các hệ thống dữ liệu có thể thay đổi thường xuyên.

Cùng chuyên mục:

Extend TinyDB trong TinyDB

Extend TinyDB trong TinyDB

Tìm hiểu Middleware trong TinyDB

Tìm hiểu Middleware trong TinyDB

Storage Types trong TinyDB

Storage Types trong TinyDB

Caching Query trong TinyDB

Caching Query trong TinyDB

Table mặc định trong TinyDB

Table mặc định trong TinyDB

Tìm hiểu Tables trong TinyDB

Tìm hiểu Tables trong TinyDB

ID tài liệu (Document ID) trong TinyDB

ID tài liệu (Document ID) trong TinyDB

Truy xuất dữ liệu TinyDB

Truy xuất dữ liệu TinyDB

Thao tác chỉnh sửa dữ liệu trong TinyDB

Thao tác chỉnh sửa dữ liệu trong TinyDB

Xử lý truy vấn dữ liệu trong TinyDB

Xử lý truy vấn dữ liệu trong TinyDB

Toán tử Logical OR trong TinyDB

Toán tử Logical OR trong TinyDB

Toán tử

Toán tử "Logical AND" trong TinyDB

Phủ định logic trong TinyDB

Phủ định logic trong TinyDB

Truy vấn one_of() trong TinyDB

Truy vấn one_of() trong TinyDB

Truy vấn all() trong TinyDB

Truy vấn all() trong TinyDB

Truy vấn any() trong TinyDB

Truy vấn any() trong TinyDB

Truy vấn test() trong TinyDB

Truy vấn test() trong TinyDB

Truy vấn matches() trong TinyDB

Truy vấn matches() trong TinyDB

Truy vấn exists() nâng cao trong TinyDB

Truy vấn exists() nâng cao trong TinyDB

Câu lệnh

Câu lệnh "where" trong TinyDB

Top