Truy vấn dữ liệu TinyDB
TinyDB cung cấp một bộ công cụ truy vấn mạnh mẽ, với hai cách tiếp cận chính để xây dựng truy vấn: cách thứ nhất giống cú pháp của các công cụ ORM, và cách thứ hai là sử dụng câu lệnh "where" truyền thống.
Trong bài này, mình sẽ tìm hiểu hai cách xây dựng truy vấn trong cơ sở dữ liệu TinyDB.
Cách thứ nhất: Sử dụng Query
trong TinyDB.
Cách đầu tiên giống với cú pháp của các công cụ ORM, trong đó đầu tiên chúng ta cần import lớp Query
. Sau khi import, chúng ta có thể sử dụng đối tượng truy vấn này để thao tác với cơ sở dữ liệu TinyDB. Cú pháp như sau:
from tinydb import Query student = Query()
Ở đây, student
là tên của cơ sở dữ liệu chúng ta. Để hiểu rõ hơn, hãy sử dụng ví dụ với cơ sở dữ liệu sinh viên như sau:
Bài viết này được đăng tại [free tuts .net]
[ { "roll_number": 1, "st_name": "elen", "mark": 250, "subject": "TinyDB", "address": "delhi" }, { "roll_number": 2, "st_name": "Ram", "mark": [250, 280], "subject": ["TinyDB", "MySQL"], "address": "delhi" }, { "roll_number": 3, "st_name": "kevin", "mark": [180, 200], "subject": ["oracle", "sql"], "address": "keral" }, { "roll_number": 4, "st_name": "lakan", "mark": 200, "subject": "MySQL", "address": "mumbai" }, { "roll_number": 5, "st_name": "karan", "mark": 275, "subject": "TinyDB", "address": "benglore" } ]
Ví dụ
Dưới đây là một truy vấn để lấy dữ liệu từ cơ sở dữ liệu sinh viên với điều kiện roll_number
nhỏ hơn 3:
>>> db.search(Query().roll_number < 3)
Hoặc:
>>> student = Query() >>> db.search(student.roll_number < 3)
Truy vấn trên sẽ trả về kết quả:
[ { "roll_number": 1, "st_name": "elen", "mark": 250, "subject": "TinyDB", "address": "delhi" }, { "roll_number": 2, "st_name": "Ram", "mark": [250, 280], "subject": ["TinyDB", "MySQL"], "address": "delhi" } ]
Đôi khi, tên trường không phải là một định danh hợp lệ trong Python. Trong trường hợp này, chúng ta sẽ không thể truy cập trường đó một cách thông thường. Để giải quyết, ta có thể sử dụng cú pháp từ điển như sau:
student = Query() # Cú pháp không hợp lệ trong Python db.search(student.security-code == 'ABCD') # Sử dụng cú pháp từ điển db.search(student['security-code'] == 'ABCD')
Cách thứ hai: Sử dụng câu lệnh "where" trong TinyDB.
Cách thứ hai là sử dụng câu lệnh "where" truyền thống để xây dựng truy vấn. Cú pháp như sau:
from tinydb import where db.search(where('field') == 'value')
Ví dụ
Truy vấn TinyDB sử dụng câu lệnh "where" để tìm các bản ghi có môn học là MySQL
:
db.search(where('subject') == 'MySQL')
Truy vấn trên sẽ trả về kết quả sau:
[ { "roll_number": 4, "st_name": "lakan", "mark": 200, "subject": "MySQL", "address": "mumbai" } ]
Kết bài
TinyDB cung cấp hai cách mạnh mẽ và linh hoạt để thực hiện truy vấn dữ liệu, giúp chúng ta dễ dàng chọn cách tiếp cận phù hợp với từng trường hợp cụ thể. Dù sử dụng cú pháp tương tự ORM hay phương pháp truyền thống với câu lệnh "where", TinyDB vẫn đảm bảo tính đơn giản và hiệu quả trong quản lý dữ liệu.