Tìm kiếm dữ liệu trong TinyDB
TinyDB cung cấp phương thức search()
để hỗ trợ bạn tìm kiếm dữ liệu trong một tài liệu. Kết hợp với đối tượng Query()
, phương thức search()
có thể được sử dụng để tìm dữ liệu trong tệp JSON. Có nhiều cách khác nhau để sử dụng phương thức search()
trong cơ sở dữ liệu TinyDB. Trong bài viết này mình sẽ tiếp tục tìm hiểu tính năng tìm kiếm theo dữ liệu trong TinyDB
Tìm kiếm dựa trên sự tồn tại của trường trong TinyDB
Chúng ta có thể tìm kiếm dữ liệu từ cơ sở dữ liệu dựa trên sự tồn tại của một trường cụ thể. Hãy cùng tìm hiểu thông qua một ví dụ. Đối với ví dụ này, chúng ta sẽ sử dụng cơ sở dữ liệu sinh viên sau:
[ { "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ụ
Truy vấn tìm kiếm dựa trên sự tồn tại của một trường cụ thể:'
from tinydb import Query student = Query() db.search(student.address.exists())
Truy vấn trên sẽ trả về dữ liệu 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" } ]
Tìm kiếm bằng biểu thức chính quy (Regular Expression) trong TinyDB
Chúng ta cũng có thể tìm kiếm dữ liệu dựa trên biểu thức chính quy (Regex). Hãy xem cách hoạt động thông qua một số ví dụ sau:
Ví dụ 1
Tìm kiếm toàn bộ mục phù hợp với biểu thức chính quy:
from tinydb import Query student = Query() db.search(student.st_name.matches('[aZ]*'))
Kết quả của truy vấn này:
[ { "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ụ 2
Tìm kiếm không phân biệt chữ hoa, chữ thường:
from tinydb import Query import re student = Query() db.search(student.st_name.matches('lakan', flags=re.IGNORECASE))
Kết quả trả về:
[{ "roll_number": 4, "st_name": "lakan", "mark": 200, "subject": "MySQL", "address": "mumbai" }]
Ví dụ 3
Tìm kiếm bất kỳ phần nào của mục phù hợp với biểu thức chính quy:
from tinydb import Query student = Query() db.search(student.st_name.search('r+'))
Kết quả:
[{ "roll_number": 5, "st_name": "karan", "mark": 275, "subject": "TinyDB", "address": "benglore" }]
Tìm kiếm sử dụng chuỗi con (Substring) trong TinyDB
Chúng ta có thể sử dụng chuỗi con để tìm kiếm dữ liệu trong cơ sở dữ liệu TinyDB. Dưới đây là một số ví dụ:
Ví dụ 1
Truy vấn này sẽ lấy tất cả các dòng có trường "address" là "delhi":
from tinydb import Query student = Query() db.search(student['address'] == 'delhi')
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" } ]
Ví dụ 2
Sử dụng cú pháp khác cho phương thức search()
:
from tinydb import Query student = Query() db.search(student.address.search('mumbai'))
Truy vấn này sẽ lấy tất cả các dòng có trường "address" là "mumbai":
[{ "roll_number": 4, "st_name": "lakan", "mark": 200, "subject": "MySQL", "address": "mumbai" }]
Kết bài
TinyDB cung cấp nhiều cách linh hoạt để tìm kiếm dữ liệu dựa trên các điều kiện như sự tồn tại của trường, biểu thức chính quy, và chuỗi con. Nhờ vào các phương thức này, TinyDB giúp việc quản lý và truy xuất dữ liệu trở nên đơn giản hơn trong các ứng dụng nhỏ hoặc đơn giản.