Trong khi làm việc với các dự án cá nhân, bạn thường cần lưu trữ một số dữ liệu. Bạn có thể sử dụng cơ sở dữ liệu SQL hoặc NoSQL với máy chủ, nhưng điều đó sẽ yêu cầu bạn thực hiện một chút thiết lập.
Trong bài viết này, chúng ta sẽ tìm hiểu về TinyDB và cách sử dụng nó để lưu trữ dữ liệu của chúng ta ở định dạng JSON.
TinyDB là gì?
TinyDB là một cơ sở dữ liệu hướng tài liệu được viết bằng Python thuần túy không có phụ thuộc bên ngoài.
Nó được thiết kế để sử dụng dễ dàng và thú vị bằng cách cung cấp API đơn giản và rõ ràng. Nó khá đơn giản để tìm hiểu và thiết lập, ngay cả đối với người mới bắt đầu.
Khi nào không sử dụng TinyDB
Như đã đề cập trong chính tài liệu TinyDB, không phải lúc nào nó cũng là lựa chọn phù hợp cho các dự án của bạn. Nếu bạn cần các tính năng nâng cao như:
- truy cập từ nhiều quy trình hoặc luồng,
- tạo chỉ mục cho các bảng,
- một máy chủ HTTP,
- quản lý các mối quan hệ giữa các bảng hoặc tương tự,
- ACID đảm bảo.
TinyDB là cơ sở dữ liệu không phù hợp với bạn. Trong những trường hợp đó, hãy cân nhắc sử dụng cơ sở dữ liệu như SQLite, Buzhug, CodernityDB hoặc MongoDB.
Cách cài đặt TinyDB
Việc cài đặt TinyDB cực kỳ dễ dàng. Chỉ cần chạy lệnh này trong thiết bị đầu cuối của bạn:
pip install tinydb
Cách sử dụng TinyDB
Hãy xem xét một ví dụ về Ứng dụng Todo nơi chúng ta chỉ cần thực hiện các thao tác CRUD. Bây giờ chúng ta đã cài đặt TinyDB, hãy xem cách chúng ta có thể lưu trữ dữ liệu của mình bằng TinyDB. TinyDB làm mọi thứ bằng JSON.
Điều đầu tiên chúng ta sẽ làm là nhập các lớp cần thiết từ tinydb
mô-đun. Vì vậy, hãy kích hoạt trình bao Python của bạn để viết mã.
$ python
Python 3.9.7 (tags/v3.9.7:1016ef3, Aug 30 2021, 20:19:38) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Bây giờ chúng tôi đã sẵn sàng để viết mã.
>>> from tinydb import TinyDB
>>> db = TinyDB("todo_db.json")
>>>
Chúng tôi đã tạo một ví dụ về TinyDB class và chuyển tên tệp cho nó. Điều này sẽ tạo một tệp JSON todo_app.json
nơi dữ liệu của chúng tôi sẽ được lưu trữ.
Cách Chèn Dữ liệu vào TinyDB
Khi chúng ta xử lý JSON, dữ liệu được thêm vào sẽ không có gì khác ngoài Từ điển Python. Vì vậy, hãy xem cách chúng ta có thể chèn một mục:
>>> new_item = {"name": "Book", "quantity": 5}
>>> db.insert(new_item)
1
>>>
Trước hết, chúng tôi đã tạo một từ điển mới gọi là new_item
với name
và quantity
đặt thành Book
và 5
, tương ứng. Sau đó, chúng tôi đã sử dụng insert()
phương pháp trong TinyDB class để chèn dữ liệu vào cơ sở dữ liệu. Các insert()
phương thức trả về id
của đối tượng vừa tạo.
Ở giai đoạn này, một tệp JSON mới có tên todo_db.json
sẽ được tạo và sau khi dữ liệu được chèn vào. Nó sẽ trông giống thế này:
{"_default": {"1": {"name": "Book", "quantity": 5}}}
Nếu bạn nhìn kỹ hơn, _default
là tên của bảng (đặt mặc định nhưng có thể thay đổi), 1
là id của đối tượng mới tạo, và giá trị của nó là dữ liệu chúng ta vừa chèn vào. Vì vậy, về cơ bản nó chỉ là một từ điển lồng nhau.
Chúng tôi cũng có thể chèn nhiều mục cùng một lúc như thế này:
>>> items = [
... {"name": "Cake", "quantity": 1},
... {"name": "Candles", "quantity": 10},
... {"name": "Balloons", "quantity": 50}
... ]
>>> db.insert_multiple(items)
[2, 3, 4]
Trong trường hợp này, chúng tôi đã tạo một danh sách các từ điển có tên items
và đã sử dụng insert_multiple()
phương pháp để chèn các mục. Phương thức này cũng trả về một danh sách id
s của các đối tượng được chèn vào.
Các todo_db.json
tập tin bây giờ trông như thế này:
{
"_default": {
"1": { "name": "Book", "quantity": 5 },
"2": { "name": "Cake", "quantity": 1 },
"3": { "name": "Candles", "quantity": 10 },
"4": { "name": "Balloons", "quantity": 50 }
}
}
Cách lấy dữ liệu từ TinyDB
Có một số cách để truy xuất dữ liệu từ cơ sở dữ liệu của bạn. Nhưng bạn sẽ cần tạo một phiên bản của Truy vấn lớp đầu tiên. Vì vậy, hãy làm điều đó:
>>> from tinydb import Query
>>> Todo = Query()
>>>
Bạn có thể dùng db.search()
phương pháp lấy dữ liệu.
>>> db.search(Todo.name == 'Book')
[{'name': 'Book', 'quantity': 5}]
>>> db.search(Todo.name == 'Copies')
[]
>>>
Các search()
phương thức trả về danh sách các mục phù hợp với truy vấn. Nếu không có mục nào như vậy, nó sẽ trả về một danh sách trống.
Chúng ta cũng có thể sử dụng get()
phương pháp để có được một mục.
>>> db.get(Todo.name == 'Book')
{'name': 'Book', 'quantity': 5}
>>> db.get(Todo.name == 'Copies')
>>>
Các get()
phương thức chỉ trả về một tài liệu phù hợp. Nếu không có tài liệu nào phù hợp, nó sẽ trả về None
.
Để kiểm tra xem một tài liệu có tồn tại trong cơ sở dữ liệu hay không, chúng tôi sử dụng contains()
phương pháp.
>>> db.contains(Todo.name == 'Copies')
False
>>> db.contains(Todo.name == 'Book')
True
>>>
Chúng tôi cũng có thể nhận được số lượng tài liệu phù hợp với truy vấn của mình bằng cách sử dụng count()
phương pháp.
>>> db.insert({"name": "Balloons", "quantity": 500})
5
>>> db.count(Todo.name == 'Balloons')
2
>>>
Để có được tổng số tài liệu được lưu trữ trong cơ sở dữ liệu, chúng tôi sử dụng len()
phương pháp.
>>> len(db)
5
>>>
Để lấy tất cả các tài liệu trong cơ sở dữ liệu, chúng ta có thể sử dụng all()
phương pháp:
>>> db.all()
[{'name': 'Book', 'quantity': 5}, {'name': 'Cake', 'quantity': 1}, {'name': 'Candles', 'quantity': 10}, {'name': 'Balloons', 'quantity': 50}, {'name': 'Balloons', 'quantity': 500}]
>>>
Cách cập nhật dữ liệu trong TinyDB
Các update()
phương thức lấy các trường mà các tài liệu phù hợp sẽ có hoặc một phương thức sẽ cập nhật các tài liệu. Nó cũng có thể lấy một điều kiện để truy vấn một đối số một cách tùy ý.
Để cập nhật tài liệu khớp với truy vấn, chúng tôi có thể thực hiện việc này:
>>> db.update({'name': 'Books'}, Todo.name == 'Book')
[1]
>>>
Ở đây, chúng tôi đã cập nhật tên của tài liệu thành Books
(tên của nó là Book
ở trên).
Đôi khi, chúng tôi cần cập nhật tất cả các tài liệu. Trong trường hợp đó, chúng tôi không viết đối số truy vấn.
>>> db.update({'quantity': 10})
[1, 2, 3, 4, 5]
>>> db.all()
[{'name': 'Books', 'quantity': 10}, {'name': 'Cake', 'quantity': 10}, {'name': 'Candles', 'quantity': 10}, {'name': 'Balloons', 'quantity': 10}, {'name': 'Balloons', 'quantity': 10}]
>>>
Chúng tôi đã cập nhật số lượng của tất cả các tài liệu để 10
.
Cách xóa dữ liệu trong TinyDB
Để xóa tài liệu khỏi cơ sở dữ liệu, chúng tôi sử dụng remove()
phương pháp. Phương pháp này có một điều kiện tùy chọn và danh sách id tài liệu tùy chọn. Nếu điều kiện phù hợp, tài liệu sẽ bị xóa.
>>> db.remove(Todo.name == 'Cake')
[2]
>>> db.all()
[{'name': 'Books', 'quantity': 10}, {'name': 'Candles', 'quantity': 10}, {'name': 'Balloons', 'quantity': 10}, {'name': 'Balloons', 'quantity': 10}]
>>> db.remove(Todo.name == 'Copies')
[]
>>>
Để xóa tài liệu bằng id tài liệu, chúng ta có thể viết mã này:
>>> db.remove(doc_ids=[4,5])
[4, 5]
>>> db.all()
[{'name': 'Books', 'quantity': 10}, {'name': 'Candles', 'quantity': 10}]
>>>
Để xóa mọi thứ khỏi cơ sở dữ liệu, chúng ta có thể sử dụng truncate()
phương pháp:
>>> db.truncate()
>>> db.all()
[]
>>>
kết thúc
Trong bài viết này, chúng ta đã nói về TinyDB và cách thực hiện các thao tác CRUD trên cơ sở dữ liệu.
Đây chỉ là một hướng dẫn cơ bản. Để tìm hiểu thêm về cách sử dụng nâng cao của TinyDB, bạn có thể xem qua tài liệu chính thức của nó.
Cảm ơn vì đã đọc!
Đăng ký nhận bản tin của tôi