Khi chúng tôi làm việc trên các ứng dụng Python, chúng tôi sẽ xử lý trực tiếp các đối tượng Python, vì mọi thứ đều là một đối tượng trong Python. Hãy xem xét một số cách mà chúng ta có thể lưu trữ chúng một cách dễ dàng
1. Sử dụng Pickle để lưu trữ các đối tượng Python
Nếu chúng ta muốn mọi thứ đơn giản, chúng ta có thể sử dụng mô-đun pickle, đây là một phần của thư viện chuẩn để lưu dữ liệu trong Python
Chúng ta có thể “chọn” các đối tượng Python vào một tệp pickle mà chúng ta có thể sử dụng để lưu/tải dữ liệu
Vì vậy, nếu bạn có một đối tượng tùy chỉnh mà bạn có thể cần lưu trữ/truy xuất, bạn có thể sử dụng định dạng này
import pickle class MyClass(): def __init__(self, param): self.param = param def save_object(obj): try: with open("data.pickle", "wb") as f: pickle.dump(obj, f, protocol=pickle.HIGHEST_PROTOCOL) except Exception as ex: print("Error during pickling object (Possibly unsupported):", ex) obj = MyClass(10) save_object(obj)
Nếu bạn chạy tập lệnh này, bạn sẽ thấy một tệp có tên là data.pickle, tệp này chứa dữ liệu đã lưu
Để tải lại cùng một đối tượng, chúng ta có thể sử dụng pickle.load() bằng cách sử dụng logic tương tự
import pickle class MyClass(): def __init__(self, param): self.param = param def load_object(filename): try: with open(filename, "rb") as f: return pickle.load(f) except Exception as ex: print("Error during unpickling object (Possibly unsupported):", ex) obj = load_object("data.pickle") print(obj.param) print(isinstance(obj, MyClass))
đầu ra
10 True
Chúng tôi vừa truy xuất thành công dữ liệu cũ của mình
2. Sử dụng Sqlite3 để lưu dữ liệu trong Python liên tục
Nếu bạn muốn sử dụng cơ sở dữ liệu liên tục để lưu dữ liệu trong Python, bạn có thể sử dụng thư viện sqlite3 cung cấp cho bạn các API để sử dụng cơ sở dữ liệu Sqlite
Một lần nữa, đây là một phần của thư viện tiêu chuẩn, vì vậy không cần phải cài đặt bất cứ thứ gì
Tuy nhiên, vì đây là Cơ sở dữ liệu quan hệ nên bạn không thể kết xuất trực tiếp các đối tượng Python như trong pickle
Bạn phải tuần tự hóa và hủy tuần tự hóa chúng thành các loại Cơ sở dữ liệu thích hợp của chúng
Để xem xét một số ví dụ, bạn có thể tham khảo bài viết này về cách sử dụng sqlite trong Python
3. Sử dụng SqliteDict làm bộ đệm liên tục
Nếu bạn thấy việc sử dụng sqlite3 quá tẻ nhạt, thì có một giải pháp tốt hơn nhiều. Bạn có thể sử dụng import pickle class MyClass(): def __init__(self, param): self.param = param def load_object(filename): try: with open(filename, "rb") as f: return pickle.load(f) except Exception as ex: print("Error during unpickling object (Possibly unsupported):", ex) obj = load_object("data.pickle") print(obj.param) print(isinstance(obj, MyClass)) 1 để lưu trữ dữ liệu liên tục và điều này sử dụng nội bộ cơ sở dữ liệu sqlite3 để xử lý việc lưu trữ
Bạn phải cài đặt gói này bằng pip
pip install sqlitedict
Điều duy nhất bạn cần lưu ý là bạn cần sử dụng ánh xạ import pickle class MyClass(): def __init__(self, param): self.param = param def load_object(filename): try: with open(filename, "rb") as f: return pickle.load(f) except Exception as ex: print("Error during unpickling object (Possibly unsupported):", ex) obj = load_object("data.pickle") print(obj.param) print(isinstance(obj, MyClass)) 3 để lưu trữ/truy xuất dữ liệu, giống như từ điển
Đây là một ví dụ rất đơn giản sử dụng đối tượng import pickle class MyClass(): def __init__(self, param): self.param = param def load_object(filename): try: with open(filename, "rb") as f: return pickle.load(f) except Exception as ex: print("Error during unpickling object (Possibly unsupported):", ex) obj = load_object("data.pickle") print(obj.param) print(isinstance(obj, MyClass)) 4
from sqlitedict import SqliteDict class MyClass(): def __init__(self, param): self.param = param def save(key, value, cache_file="cache.sqlite3"): try: with SqliteDict(cache_file) as mydict: mydict[key] = value # Using dict[key] to store mydict.commit() # Need to commit() to actually flush the data except Exception as ex: print("Error during storing data (Possibly unsupported):", ex) def load(key, cache_file="cache.sqlite3"): try: with SqliteDict(cache_file) as mydict: value = mydict[key] # No need to use commit(), since we are only loading data! return value except Exception as ex: print("Error during loading data:", ex) obj1 = MyClass(10) save("MyClass_key", obj1) obj2 = load("MyClass_key") print(obj1.param, obj2.param) print(isinstance(obj1, MyClass), isinstance(obj2, MyClass))
đầu ra
________số 8_______
Thật vậy, chúng ta vừa tải thành công đối tượng Python của mình. Nếu bạn để ý, import pickle class MyClass(): def __init__(self, param): self.param = param def load_object(filename): try: with open(filename, "rb") as f: return pickle.load(f) except Exception as ex: print("Error during unpickling object (Possibly unsupported):", ex) obj = load_object("data.pickle") print(obj.param) print(isinstance(obj, MyClass)) 1 sẽ tự động tạo một cơ sở dữ liệu import pickle class MyClass(): def __init__(self, param): self.param = param def load_object(filename): try: with open(filename, "rb") as f: return pickle.load(f) except Exception as ex: print("Error during unpickling object (Possibly unsupported):", ex) obj = load_object("data.pickle") print(obj.param) print(isinstance(obj, MyClass)) 6, nếu nó không tồn tại, và sau đó sử dụng nó để lưu trữ/tải dữ liệu