โมดูลชั้นวางในไลบรารีมาตรฐานของ Python เป็นเครื่องมือที่เรียบง่ายแต่มีประสิทธิภาพสำหรับการจัดเก็บข้อมูลแบบถาวร เมื่อใช้โซลูชันฐานข้อมูลเชิงสัมพันธ์ไม่จำเป็น วัตถุชั้นวางที่กำหนดไว้ในโมดูลนี้เป็นวัตถุที่เหมือนพจนานุกรมซึ่งถูกเก็บไว้ในไฟล์ดิสก์อย่างต่อเนื่อง สิ่งนี้สร้างไฟล์ที่คล้ายกับฐานข้อมูล dbm บน UNIX เช่นระบบ เฉพาะชนิดข้อมูลสตริงเท่านั้นที่สามารถใช้เป็นคีย์ในออบเจ็กต์พจนานุกรมพิเศษนี้ ในขณะที่อ็อบเจ็กต์ picklable ใดๆ สามารถใช้เป็นค่าได้
โมดูลชั้นวางกำหนดสามคลาสดังนี้ −
| ซีเนียร์ | โมดูล &คำอธิบาย |
|---|---|
| 1 | ชั้นวางของ นี่คือคลาสพื้นฐานสำหรับการใช้งานชั้นวาง มันถูกเริ่มต้นด้วยวัตถุที่เหมือน dict |
| 2 | BsdDbShelf นี่คือคลาสย่อยของคลาสชั้นวาง ออบเจ็กต์ dict ที่ส่งผ่านไปยังคอนสตรัคเตอร์ต้องรองรับเมธอด first(), next(), Previous(), last() และ set_location() |
| 3 | DbfilenameShelf นี่เป็นคลาสย่อยของ Shelf แต่ยอมรับชื่อไฟล์เป็นพารามิเตอร์สำหรับตัวสร้างแทนที่จะเป็นอ็อบเจกต์ dict |
วิธีที่ง่ายที่สุดในการสร้างวัตถุชั้นวางคือการใช้ฟังก์ชัน open() ที่กำหนดไว้ในโมดูล shelve ซึ่งส่งคืนวัตถุ DbfilenameShelf
open(filename, flag = 'c', protocol=None, writeback = False)
พารามิเตอร์ชื่อไฟล์ถูกกำหนดให้กับฐานข้อมูลที่สร้างขึ้น
ค่าเริ่มต้นสำหรับพารามิเตอร์แฟล็กคือ 'c' สำหรับการเข้าถึงแบบอ่าน/เขียน แฟล็กอื่นๆ คือ 'w' (เขียนเท่านั้น) 'r' (อ่านอย่างเดียว) และ 'n' (ใหม่พร้อมการอ่าน/เขียน)
พารามิเตอร์โปรโตคอลแสดงถึงพารามิเตอร์การเขียนกลับของโปรโตคอล pickle โดยค่าเริ่มต้นเป็นเท็จ หากตั้งค่าเป็น true รายการเข้าถึงจะถูกแคช ทุกการเข้าถึงเรียก sync() และ close() การดำเนินการจึงอาจช้า
รหัสต่อไปนี้สร้างฐานข้อมูลและจัดเก็บรายการพจนานุกรมในนั้น
import shelve
s = shelve.open("test")
s['name'] = "Ajay"
s['age'] = 23
s['marks'] = 75
s.close() สิ่งนี้จะสร้างไฟล์ test.dir ในไดเร็กทอรีปัจจุบันและเก็บข้อมูลคีย์-ค่าในรูปแบบที่แฮช วัตถุชั้นวางมีวิธีการดังต่อไปนี้ -
| ซีเนียร์ | วิธีการ &คำอธิบาย |
|---|---|
| 1 | ปิด() ประสานและปิดวัตถุ dict ถาวร |
| 2 | ซิงค์() เขียนกลับรายการทั้งหมดในแคชหากชั้นวางเปิดโดยตั้งค่าการเขียนกลับเป็น True |
| 3 | get() ส่งคืนค่าที่เกี่ยวข้องกับคีย์ |
| 4 | รายการ() รายการทูเพิล – ทูเพิลแต่ละตัวเป็นคู่ของค่าคีย์ |
| 5 | คีย์() รายการกุญแจชั้นวาง |
| 6 | ป๊อป() ลบคีย์ที่ระบุและคืนค่าที่เกี่ยวข้อง |
| 7 | อัปเดต() อัปเดตชั้นวางจาก dict/iterable อื่น |
| 8 | values() รายการค่าชั้นวาง |
เพื่อเข้าถึงค่าของคีย์เฉพาะในชั้นวาง
>>> s=shelve.open('test')
>>> s['age']
23
>>> s['age']=25
>>> s.get('age')
25 รายการ (), คีย์ () และค่า () วิธีการส่งคืนอ็อบเจ็กต์มุมมอง
>>> list(s.items())
[('name', 'Ajay'), ('age', 25), ('marks', 75)]
>>> list(s.keys())
['name', 'age', 'marks']
>>> list(s.values())
['Ajay', 25, 75] วิธีลบคู่คีย์-ค่าออกจากชั้นวาง
>>> s.pop('marks')
75
>>> list(s.items())
[('name', 'Ajay'), ('age', 25)] สังเกตว่าคู่คีย์-ค่าของเครื่องหมาย-75 ถูกลบออก
การรวมรายการของพจนานุกรมอื่นด้วยชั้นใช้ update() วิธีการ
>>> d={'salary':10000, 'designation':'manager'}
>>> s.update(d)
>>> list(s.items())
[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')] ในบทความนี้ เราได้เรียนรู้เกี่ยวกับโมดูลชั้นวางซึ่งมีกลไกที่สะดวกสำหรับการจัดเก็บอ็อบเจ็กต์พจนานุกรมถาวร