แพ็กเกจ dbm ในไลบรารีมาตรฐาน Python ให้ Dictionary-like interface สำหรับ DBM-style databases DBM = DataBase Manager ใช้ใน UNIX เก็บข้อมูลด้วย Primary Key เดียว ใช้ Hashing เพื่อ Retrieval ที่เร็ว
โมดูลใน dbm Package
- dbm.ndbm: Interface ไปยัง Unix "(n)dbm" library Keys/Values ต้องเป็น bytes ไม่รองรับ items()/values()
- dbm.dumb: Persistent dictionary เขียน純 Python ไม่ต้อง External library Keys/Values เป็น bytes เสมอ
- dbm.gnu: GNU dbm (gdbm) - ถ้ามีติดตั้ง
โมดูลเหล่านี้ถูกใช้โดย shelve module ชื่อไฟล์ Database จะมี '.dir' postfix
ฟังก์ชัน whichdb()
>>> import dbm
>>> dbm.whichdb('mydbm.db')
'dbm.dumb'
การเปิดและใช้งาน Database
>>> db = dbm.open('mydbm.db', 'n') # 'n' = สร้างใหม่เสมอ
>>> db['name'] = b'Rajani Deshmukh'
>>> db['address'] = b'Shivajinagar Pune'
>>> db['PIN'] = b'431001'
>>> db.close()
Mode Flags สำหรับ open()
| Flag | ความหมาย |
|---|---|
| 'r' | เปิดอ่านอย่างเดียว (Default) |
| 'w' | เปิดอ่าน/เขียน (ต้องมีอยู่แล้ว) |
| 'c' | เปิดอ่าน/เขียน สร้างใหม่ถ้าไม่มี |
| 'n' | สร้างใหม่เสมอ ว่างเปล่า อ่าน/เขียน |
Dictionary-like Operations
>>> db = dbm.open('mydbm.db', 'r')
>>> for k, v in db.items():
... print(k, v)
b'name' : b'Rajani Deshmukh'
b'address' : b'Shivajinagar Pune'
b'PIN' : b'431001'
รองรับ get(), pop(), update() (แต่ไม่ใช่ append())
Methods เพิ่มเติม
sync(): ซิงค์ข้อมูลลงดิสก์ (ถูกเรียกโดย shelve.sync())close(): ปิด Database
GNU dbm (gdbm) Methods เพิ่มเติม
firstkey(): คืน Key แรก สำหรับ Loop ทุก Keynextkey(key): คืน Key ถัดไปในการ Traversereorganize(): จัดระเบียบ Database ใหม่ (ลดขนาดไฟล์หลัง Delete)
ข้อควรระวัง
- Keys และ Values ต้องเป็น bytes (Python 3)
- ไม่รองรับ Unicode strings โดยตรง ต้อง encode/decode เอง
- dbm.dumb ช้ากว่า ndbm/gdbm แต่ Portable (Pure Python)
- สำหรับการใช้งานจริง ควรพิจารณา
sqlite3หรือshelveแทน