Truy vấn matches() trong TinyDB
Truy vấn matches()
trong TinyDB là một công cụ mạnh mẽ, giúp người dùng tìm kiếm và lọc dữ liệu một cách linh hoạt dựa trên biểu thức chính quy. Với khả năng so khớp dữ liệu theo điều kiện phức tạp, truy vấn này giúp việc truy xuất thông tin từ cơ sở dữ liệu JSON trở nên chính xác và hiệu quả hơn, đặc biệt trong các tình huống cần xử lý dữ liệu lớn và đa dạng.
Truy vấn matches()
trong TinyDB giúp kiểm tra dữ liệu từ tệp JSON theo một điều kiện nhất định (thường ở dạng biểu thức chính quy) và trả về kết quả tương ứng. Nếu điều kiện không khớp với dữ liệu trong tệp, truy vấn sẽ trả về giá trị rỗng.
Cú pháp của truy vấn matches()
trong TinyDB
db.search(Query().field.matches(biểu thức chính quy))
Trong đó, field
đại diện cho phần dữ liệu mà chúng ta muốn truy xuất. Query()
là đối tượng được tạo ra từ bảng JSON của chúng ta (ở đây là bảng student
).
Chúng ta sẽ hiểu cách hoạt động của matches()
thông qua một số ví dụ. Cơ sở dữ liệu học sinh dưới đây sẽ được sử dụng giống như các chương trước.
Bài viết này được đăng tại [free tuts .net]
Tìm kiếm toàn bộ mục bằng matches()
trong TinyDB
from tinydb import Query student = Query() db.search(student.st_name.matches('[aZ]*'))
Truy vấn này sẽ tìm tất cả các hàng có tên học sinh phù hợp với biểu thức chính quy [aZ]*
, kết quả như 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" } ]
Tìm kiếm phân biệt chữ hoa chữ thường
from tinydb import Query import re student = Query() db.search(student.st_name.matches('ram', flags=re.IGNORECASE))
Truy vấn này sẽ tìm những hàng có tên học sinh khớp với chuỗi "ram", bất kể chữ hoa hay chữ thường nhờ vào cờ IGNORECASE
:
[{ 'roll_number': 2, 'st_name': 'Ram', 'mark': [250, 280], 'subject': ['TinyDB', 'MySQL'], 'address': 'delhi' }]
Tìm kiếm một mục cụ thể
student = Query() db.search(student.address.matches('keral'))
Truy vấn này sẽ trả về hàng có địa chỉ khớp với chuỗi "keral":
[{ 'roll_number': 3, 'st_name': 'kevin', 'mark': [180, 200], 'subject': ['oracle', 'sql'], 'address': 'keral' }]
Không tìm thấy mục khớp
student = Query() db.search(student.address.matches('Ratlam'))
Vì không có hàng nào có trường "address" khớp với chuỗi "Ratlam", truy vấn sẽ trả về giá trị rỗng:
[]
Kết bài
Truy vấn matches()
trong TinyDB không chỉ cung cấp sự linh hoạt trong việc tìm kiếm dựa trên các biểu thức chính quy, mà còn giúp tối ưu hóa quá trình truy xuất dữ liệu theo nhiều điều kiện khác nhau. Điều này làm cho TinyDB trở thành một công cụ hữu ích khi làm việc với các cơ sở dữ liệu JSON phức tạp, hỗ trợ người dùng dễ dàng quản lý và tìm kiếm thông tin một cách hiệu quả và chính xác.