dbm --- Giao diện với "cơ sở dữ liệu" Unix

Source code: Lib/dbm/__init__.py


dbm là giao diện chung cho các biến thể của cơ sở dữ liệu DBM:

Nếu không có mô-đun nào trong số này được cài đặt thì việc triển khai chậm nhưng đơn giản trong mô-đun dbm.dumb sẽ được sử dụng. Có một third party interface cho Oracle Berkeley DB.

exception dbm.error

Một bộ chứa các ngoại lệ có thể được đưa ra bởi mỗi mô-đun được hỗ trợ, với một ngoại lệ duy nhất cũng được đặt tên là dbm.error làm mục đầu tiên --- mục sau được sử dụng khi dbm.error được nâng lên.

dbm.whichdb(filename)

Hàm này cố gắng đoán mô-đun cơ sở dữ liệu đơn giản nào trong số một số mô-đun cơ sở dữ liệu đơn giản --- dbm.sqlite3, dbm.gnu, dbm.ndbm hoặc dbm.dumb --- nên được sử dụng để mở một tệp nhất định.

Trả về một trong các giá trị sau:

  • None nếu không mở được file vì không đọc được hoặc không tồn tại

  • chuỗi trống ('') nếu không thể đoán được định dạng của tệp

  • một chuỗi chứa tên mô-đun được yêu cầu, chẳng hạn như 'dbm.ndbm' hoặc 'dbm.gnu'

Thay đổi trong phiên bản 3.11: filename chấp nhận path-like object.

dbm.open(file, flag='r', mode=0o666)

Mở cơ sở dữ liệu và trả về đối tượng cơ sở dữ liệu tương ứng.

Tham số:
  • file (path-like object) -- Tệp cơ sở dữ liệu để mở. Nếu tệp cơ sở dữ liệu đã tồn tại, hàm whichdb() sẽ được sử dụng để xác định loại của nó và mô-đun thích hợp sẽ được sử dụng; nếu nó không tồn tại, mô-đun con đầu tiên được liệt kê ở trên có thể được nhập sẽ được sử dụng.

  • flag (str) --

    • 'r' (mặc định): Open existing database for reading only.

    • 'w': Open existing database for reading and writing.

    • 'c': Open database for reading and writing, creating it if it doesn't exist.

    • 'n': Always create a new, empty database, open for reading and writing.

  • mode (int) -- The Unix file access mode of the file (default: octal 0o666), used only when the database has to be created.

Thay đổi trong phiên bản 3.11: file chấp nhận path-like object.

Đối tượng được trả về bởi open() hỗ trợ chức năng cơ bản của mappings có thể thay đổi; các khóa và giá trị tương ứng của chúng có thể được lưu trữ, truy xuất và xóa, đồng thời lặp lại, toán tử in và các phương thức keys(), get(), setdefault()clear() đều có sẵn. Phương thức keys() trả về một danh sách thay vì một đối tượng xem. Phương thức setdefault() yêu cầu hai đối số.

Khóa và giá trị luôn được lưu trữ dưới dạng bytes. Điều này có nghĩa là khi sử dụng chuỗi, chúng sẽ được chuyển đổi hoàn toàn sang mã hóa mặc định trước khi được lưu trữ.

Các đối tượng này cũng hỗ trợ được sử dụng trong câu lệnh with, câu lệnh này sẽ tự động đóng chúng khi hoàn tất.

Thay đổi trong phiên bản 3.2: Các phương thức get()setdefault() hiện có sẵn cho tất cả các chương trình phụ trợ dbm.

Thay đổi trong phiên bản 3.4: Đã thêm hỗ trợ gốc cho giao thức quản lý ngữ cảnh cho các đối tượng được open() trả về.

Thay đổi trong phiên bản 3.8: Việc xóa khóa khỏi cơ sở dữ liệu chỉ đọc sẽ tạo ra một ngoại lệ cụ thể của mô-đun cơ sở dữ liệu thay vì KeyError.

Thay đổi trong phiên bản 3.13: Các phương thức clear() hiện có sẵn cho tất cả các chương trình phụ trợ dbm.

Ví dụ sau ghi lại một số tên máy chủ và tiêu đề tương ứng, sau đó in ra nội dung của cơ sở dữ liệu:

nhập dbm

 sở dữ liệu # Open, tạo nó nếu cần thiết.
với dbm.open('cache', 'c')  db:

    # Record một số giá trị
    db[b'hello'] = b'there'
    db['www.python.org'] = 'Trang web Python'
    db['www.cnn.com'] = 'Mạng tin tức cáp'

    # Note rằng các khóa hiện được coi là byte.
    khẳng định db[b'www.python.org'] == b'Trang web Python'
    # Notice giá trị hiện tại tính bằng byte.
    khẳng định db['www.cnn.com'] == b'Mạng tin tức cáp'

    Các phương thức # Often-used của giao diện dict cũng hoạt động.
    print(db.get('python.org', b'không có mặt'))

    # Storing khóa hoặc giá trị không phải chuỗi sẽ đưa ra một ngoại lệ (hầu hết
    # likely và TypeError).
    db['www.yahoo.com'] = 4

# db được tự động đóng khi rời khỏi câu lệnh with.

Xem thêm

Mô-đun shelve

Mô-đun kiên trì lưu trữ dữ liệu không phải chuỗi.

Các mô-đun con riêng lẻ được mô tả trong các phần sau.

dbm.sqlite3 --- Phần phụ trợ SQLite cho dbm

Added in version 3.13.

Source code: Lib/dbm/sqlite3.py


Mô-đun này sử dụng mô-đun sqlite3 của thư viện chuẩn để cung cấp phần phụ trợ SQLite cho mô-đun dbm. Do đó, các tệp được tạo bởi dbm.sqlite3 có thể được mở bằng sqlite3 hoặc bất kỳ trình duyệt SQLite nào khác, bao gồm cả SQLite CLI.

sẵn có: not WASI.

Mô-đun này không hoạt động hoặc không có trên WebAssembly. Xem Nền tảng WebAssugging để biết thêm thông tin.

dbm.sqlite3.open(filename, /, flag='r', mode=0o666)

Mở cơ sở dữ liệu SQLite.

Tham số:
  • filename (path-like object) -- Đường dẫn đến cơ sở dữ liệu sẽ được mở.

  • flag (str) --

    • 'r' (mặc định): Open existing database for reading only.

    • 'w': Open existing database for reading and writing.

    • 'c': Open database for reading and writing, creating it if it doesn't exist.

    • 'n': Always create a new, empty database, open for reading and writing.

  • mode -- Chế độ truy cập tệp Unix của tệp (mặc định: 0o666 bát phân), chỉ được sử dụng khi cơ sở dữ liệu phải được tạo.

Đối tượng cơ sở dữ liệu được trả về hoạt động tương tự như một mapping có thể thay đổi, nhưng phương thức keys() trả về một danh sách và phương thức setdefault() yêu cầu hai đối số. Nó cũng hỗ trợ trình quản lý bối cảnh "đóng" thông qua từ khóa with.

Phương pháp sau đây cũng được cung cấp:

sqlite3.close()

Đóng cơ sở dữ liệu SQLite.

dbm.gnu --- quản lý cơ sở dữ liệu GNU

Source code: Lib/dbm/gnu.py


Mô-đun dbm.gnu cung cấp giao diện cho thư viện GDBM, tương tự như mô-đun dbm.ndbm nhưng có chức năng bổ sung như khả năng chịu sự cố.

Ghi chú

Các định dạng tệp được tạo bởi dbm.gnudbm.ndbm không tương thích và không thể sử dụng thay thế cho nhau.

sẵn có: not Android, not iOS, not WASI.

Mô-đun này không được hỗ trợ trên mobile platforms hoặc WebAssembly platforms.

sẵn có: Unix.

exception dbm.gnu.error

Phát sinh từ các lỗi cụ thể của dbm.gnu, chẳng hạn như lỗi I/O. KeyError được đưa ra để khắc phục các lỗi ánh xạ chung như chỉ định khóa không chính xác.

dbm.gnu.open_flags

Một chuỗi ký tự mà tham số flag của open() hỗ trợ.

dbm.gnu.open(filename, flag='r', mode=0o666, /)

Mở cơ sở dữ liệu GDBM và trả về đối tượng gdbm.

Tham số:
  • filename (path-like object) -- Tệp cơ sở dữ liệu để mở.

  • flag (str) --

    • 'r' (mặc định): Open existing database for reading only.

    • 'w': Open existing database for reading and writing.

    • 'c': Open database for reading and writing, creating it if it doesn't exist.

    • 'n': Always create a new, empty database, open for reading and writing.

    Các ký tự bổ sung sau đây có thể được thêm vào để kiểm soát cách mở cơ sở dữ liệu:

    • 'f': Mở cơ sở dữ liệu ở chế độ nhanh. Việc ghi vào cơ sở dữ liệu sẽ không được đồng bộ hóa.

    • 's': Chế độ đồng bộ. Các thay đổi đối với cơ sở dữ liệu sẽ được ghi ngay vào tệp.

    • 'u': Không khóa cơ sở dữ liệu.

    Không phải tất cả các cờ đều hợp lệ cho mọi phiên bản của GDBM. Xem thành viên open_flags để biết danh sách các ký tự cờ được hỗ trợ.

  • mode (int) -- The Unix file access mode of the file (default: octal 0o666), used only when the database has to be created.

Đưa ra:

error -- Nếu một đối số flag không hợp lệ được thông qua.

Thay đổi trong phiên bản 3.11: filename chấp nhận path-like object.

Các đối tượng gdbm hoạt động tương tự như mappings có thể thay đổi, nhưng các phương thức items(), values(), pop(), popitem()update() không được hỗ trợ, phương thức keys() trả về một danh sách và phương thức setdefault() yêu cầu hai đối số. Nó cũng hỗ trợ trình quản lý bối cảnh "đóng" thông qua từ khóa with.

Thay đổi trong phiên bản 3.2: Đã thêm phương thức get()setdefault().

Thay đổi trong phiên bản 3.13: Đã thêm phương thức clear().

Các phương pháp sau đây cũng được cung cấp:

gdbm.close()

Đóng cơ sở dữ liệu GDBM.

gdbm.firstkey()

Có thể lặp lại mọi khóa trong cơ sở dữ liệu bằng phương pháp này và phương thức nextkey(). Việc truyền tải được sắp xếp theo các giá trị băm nội bộ của GDBM và sẽ không được sắp xếp theo các giá trị khóa. Phương thức này trả về khóa bắt đầu.

gdbm.nextkey(key)

Trả về khóa theo sau key trong quá trình truyền tải. Đoạn mã sau in mọi khóa trong cơ sở dữ liệu db mà không cần phải tạo danh sách trong bộ nhớ chứa tất cả chúng:

k = db.firstkey()
trong khi k không phải  Không :
    in(k)
    k = db.nextkey(k)
gdbm.reorganize()

Nếu bạn đã thực hiện nhiều thao tác xóa và muốn thu nhỏ dung lượng mà tệp GDBM sử dụng, quy trình này sẽ sắp xếp lại cơ sở dữ liệu. Các đối tượng gdbm sẽ không rút ngắn độ dài của tệp cơ sở dữ liệu ngoại trừ việc sử dụng cách sắp xếp lại này; nếu không, dung lượng tệp đã xóa sẽ được giữ lại và sử dụng lại khi các cặp (khóa, giá trị) mới được thêm vào.

gdbm.sync()

Khi cơ sở dữ liệu đã được mở ở chế độ nhanh, phương pháp này buộc mọi dữ liệu chưa được ghi vào đĩa sẽ được ghi vào đĩa.

dbm.ndbm --- Trình quản lý cơ sở dữ liệu mới

Source code: Lib/dbm/ndbm.py


Mô-đun dbm.ndbm cung cấp giao diện cho thư viện NDBM. Mô-đun này có thể được sử dụng với giao diện NDBM "cổ điển" hoặc giao diện tương thích GDBM.

Ghi chú

Các định dạng tệp được tạo bởi dbm.gnudbm.ndbm không tương thích và không thể sử dụng thay thế cho nhau.

Cảnh báo

Thư viện NDBM được cung cấp như một phần của macOS có giới hạn không được ghi chép về kích thước của các giá trị, điều này có thể dẫn đến các tệp cơ sở dữ liệu bị hỏng khi lưu trữ các giá trị lớn hơn giới hạn này. Việc đọc các tệp bị hỏng như vậy có thể dẫn đến sự cố nghiêm trọng (lỗi phân đoạn).

sẵn có: not Android, not iOS, not WASI.

Mô-đun này không được hỗ trợ trên mobile platforms hoặc WebAssembly platforms.

sẵn có: Unix.

exception dbm.ndbm.error

Phát sinh từ các lỗi cụ thể của dbm.ndbm, chẳng hạn như lỗi I/O. KeyError được đưa ra để khắc phục các lỗi ánh xạ chung như chỉ định khóa không chính xác.

dbm.ndbm.library

Tên của thư viện triển khai NDBM được sử dụng.

dbm.ndbm.open(filename, flag='r', mode=0o666, /)

Mở cơ sở dữ liệu NDBM và trả về một đối tượng ndbm.

Tham số:
  • filename (path-like object) -- Tên cơ sở của tệp cơ sở dữ liệu (không có phần mở rộng .dir hoặc .pag).

  • flag (str) --

    • 'r' (mặc định): Open existing database for reading only.

    • 'w': Open existing database for reading and writing.

    • 'c': Open database for reading and writing, creating it if it doesn't exist.

    • 'n': Always create a new, empty database, open for reading and writing.

  • mode (int) -- The Unix file access mode of the file (default: octal 0o666), used only when the database has to be created.

Thay đổi trong phiên bản 3.11: Chấp nhận path-like object cho tên tệp.

Các đối tượng ndbm hoạt động tương tự như mappings có thể thay đổi, nhưng các phương thức items(), values(), pop(), popitem()update() không được hỗ trợ, phương thức keys() trả về một danh sách và phương thức setdefault() yêu cầu hai đối số. Nó cũng hỗ trợ trình quản lý bối cảnh "đóng" thông qua từ khóa with.

Thay đổi trong phiên bản 3.2: Đã thêm phương thức get()setdefault().

Thay đổi trong phiên bản 3.13: Đã thêm phương thức clear().

Phương pháp sau đây cũng được cung cấp:

ndbm.close()

Đóng cơ sở dữ liệu NDBM.

dbm.dumb --- Triển khai DBM di động

Source code: Lib/dbm/dumb.py

Ghi chú

Mô-đun dbm.dumb được coi là giải pháp dự phòng cuối cùng cho mô-đun dbm khi không có mô-đun mạnh mẽ hơn. Mô-đun dbm.dumb không được viết cho tốc độ và gần như không được sử dụng nhiều như các mô-đun cơ sở dữ liệu khác.


Mô-đun dbm.dumb cung cấp giao diện giống dict liên tục được viết hoàn toàn bằng Python. Không giống như các chương trình phụ trợ dbm khác, chẳng hạn như dbm.gnu, không cần thư viện bên ngoài.

Mô-đun dbm.dumb xác định như sau:

exception dbm.dumb.error

Phát sinh từ các lỗi cụ thể của dbm.dumb, chẳng hạn như lỗi I/O. KeyError được đưa ra để khắc phục các lỗi ánh xạ chung như chỉ định khóa không chính xác.

dbm.dumb.open(filename, flag='c', mode=0o666)

Mở cơ sở dữ liệu dbm.dumb.

Tham số:
  • filename -- Tên cơ sở của tệp cơ sở dữ liệu (không có phần mở rộng). Cơ sở dữ liệu mới tạo các tệp sau: - filename.dat - filename.dir

  • flag (str) --

    • 'r': Open existing database for reading only.

    • 'w': Open existing database for reading and writing.

    • 'c' (mặc định): Open database for reading and writing, creating it if it doesn't exist.

    • 'n': Always create a new, empty database, open for reading and writing.

  • mode (int) -- The Unix file access mode of the file (default: octal 0o666), used only when the database has to be created.

Cảnh báo

Có thể làm hỏng trình thông dịch Python khi tải cơ sở dữ liệu có mục nhập đủ lớn/phức tạp do giới hạn độ sâu ngăn xếp trong trình biên dịch AST của Python.

Thay đổi trong phiên bản 3.5: open() luôn tạo cơ sở dữ liệu mới khi flag'n'.

Thay đổi trong phiên bản 3.8: Cơ sở dữ liệu được mở ở chế độ chỉ đọc nếu flag'r'. Cơ sở dữ liệu không được tạo nếu nó không tồn tại nếu flag'r' hoặc 'w'.

Thay đổi trong phiên bản 3.11: filename chấp nhận path-like object.

Đối tượng cơ sở dữ liệu được trả về hoạt động tương tự như một mapping có thể thay đổi, nhưng các phương thức keys()items() trả về danh sách và phương thức setdefault() yêu cầu hai đối số. Nó cũng hỗ trợ trình quản lý bối cảnh "đóng" thông qua từ khóa with.

Các phương pháp sau đây cũng được cung cấp:

dumbdbm.close()

Đóng cơ sở dữ liệu.

dumbdbm.sync()

Đồng bộ hóa thư mục trên đĩa và các tập tin dữ liệu. Phương thức này được gọi bằng phương thức shelve.Shelf.sync().