Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Interfaces ไปยัง Unix Databases (dbm)

แพ็กเกจ 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 ทุก Key
  • nextkey(key): คืน Key ถัดไปในการ Traverse
  • reorganize(): จัดระเบียบ Database ใหม่ (ลดขนาดไฟล์หลัง Delete)

ข้อควรระวัง

  • Keys และ Values ต้องเป็น bytes (Python 3)
  • ไม่รองรับ Unicode strings โดยตรง ต้อง encode/decode เอง
  • dbm.dumb ช้ากว่า ndbm/gdbm แต่ Portable (Pure Python)
  • สำหรับการใช้งานจริง ควรพิจารณา sqlite3 หรือ shelve แทน