Extend TinyDB trong TinyDB
TinyDB là một thư viện cơ sở dữ liệu nhỏ gọn và linh hoạt dành cho Python, cho phép lưu trữ dữ liệu một cách dễ dàng mà không cần đến hệ quản trị cơ sở dữ liệu phức tạp. Bên cạnh tính năng cơ bản, TinyDB còn cung cấp khả năng mở rộng và tùy chỉnh, cho phép người dùng điều chỉnh cách thức hoạt động của cơ sở dữ liệu. Trong bài viết này, mình sẽ cùng tìm hiểu các phương pháp để mở rộng TinyDB, bao gồm việc sử dụng middleware tùy chỉnh, lưu trữ tùy chỉnh, hooks và overrides, cũng như kế thừa TinyDB và các bảng dữ liệu.

TinyDB cho phép mở rộng và tùy chỉnh hành vi của nó. Có bốn cách chính để thực hiện điều này:
- Middleware tùy chỉnh
- Lưu trữ tùy chỉnh (Custom storages)
- Hooks và overrides
- Kế thừa (Subclassing) TinyDB và Table
Trong phần này, mình sẽ tìm hiểu chi tiết từng phương pháp.
Middleware tùy chỉnh trong TinyDB
Đôi khi người dùng không muốn tạo một module lưu trữ mới mà chỉ cần thay đổi cách thức hoạt động của module lưu trữ hiện tại. Trong trường hợp này, người dùng có thể sử dụng middleware để tùy chỉnh hành vi của cơ sở dữ liệu. Ví dụ, chúng ta sẽ tạo một middleware lọc bỏ các mục trống.
Bài viết này được đăng tại [free tuts .net]
Dữ liệu trước khi đi qua middleware tùy chỉnh:
{
'_default': {
1: {'key1': 'value1'},
2: {'key2': 'value2'},
...,
N: {'keyN': 'valueN'}
}
}
Cách triển khai middleware tùy chỉnh:
class RemoveEmptyItemsMiddleware(Middleware):
def __init__(self, storage_cls):
super(self).__init__(storage_cls)
def read(self):
data = self.storage.read()
for _default in data:
st_name = data
for doc_id in table:
item = st_name
if item == {}:
del st_name
return data
def close(self):
self.storage.close()
Middleware này sẽ lọc bỏ những mục trống trước khi dữ liệu được lưu trữ.
Lưu trữ tùy chỉnh trong TinyDB
Như đã biết, TinyDB cung cấp hai loại lưu trữ: lưu trữ trong bộ nhớ (in-memory) và lưu trữ bằng file JSON. Tuy nhiên, TinyDB cũng cho phép người dùng thêm các loại lưu trữ tùy chỉnh. Ví dụ, chúng ta sẽ thêm lưu trữ YAML bằng cách sử dụng thư viện PyYAML.
Cách triển khai lưu trữ YAML:
import yaml
class YAMLStorage(Storage):
def __init__(self, db_json):
self.db_json = db_json
def read(self):
with open(self.db_json) as handle:
try:
info = yaml.safe_load(handle.read())
return info
except yaml.YAMLError:
return None
def write(self, info):
with open(self.db_json, 'w+') as handle:
yaml.dump(info, handle)
def close(self):
pass
Hooks và Overrides trong TinyDB
Nếu cả lưu trữ tùy chỉnh và middleware tùy chỉnh đều không đáp ứng được nhu cầu, người dùng có thể sử dụng hooks và overrides để thay đổi hành vi của TinyDB.
Ví dụ, để cấu hình tên bảng mặc định:
TinyDB.default_table_name = 'student_detail'
Hoặc để đặt dung lượng bộ nhớ cache:
TinyDB.table_class.default_query_cache_capacity = 50
Kế thừa TinyDB và Table
Đây là phương pháp cuối cùng để tùy chỉnh TinyDB. Ví dụ, ta có thể tạo một lớp con (subclass) để ghi đè các lớp mặc định:
class ExtendTable(Table):
TinyDB.table_class = student_detail
Kết bài
Bằng cách sử dụng các phương pháp trên, TinyDB cho phép người dùng mở rộng và tùy chỉnh cơ sở dữ liệu một cách linh hoạt, phù hợp với nhiều tình huống khác nhau. Từ việc tạo middleware đến lưu trữ tùy chỉnh, người dùng có thể dễ dàng điều chỉnh TinyDB theo nhu cầu của mình, mang lại hiệu quả cao trong việc xử lý và quản lý dữ liệu.

Thiết lập ID tăng tự động với Identity trong SQL Server
Khóa ngoại (Foreign Key) trong MySQL
Mô hình thực thể mối kết hợp (ER)
Gộp dữ liệu với UNION và UNION ALL trong SQL
Hàm Hàm TO_DATE trong Oracle
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng