โมดูลชั้นวางในไลบรารีมาตรฐานของ 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')]
ในบทความนี้ เราได้เรียนรู้เกี่ยวกับโมดูลชั้นวางซึ่งมีกลไกที่สะดวกสำหรับการจัดเก็บอ็อบเจ็กต์พจนานุกรมถาวร