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