Χρησιμοποιώντας Shelve για να αποθηκεύσετε αντικείμενα στην Python

Το Shelve είναι μια ισχυρή ενότητα Python για την επιμονή του αντικειμένου. Όταν αποθηκεύετε ένα αντικείμενο, πρέπει να αντιστοιχίσετε ένα κλειδί με το οποίο είναι γνωστή η τιμή του αντικειμένου. Με αυτόν τον τρόπο, το αρχείο ράφι γίνεται μια βάση δεδομένων με αποθηκευμένες τιμές, οποιαδήποτε από τις οποίες μπορεί να προσπελαστεί ανά πάσα στιγμή.

Δείγμα κώδικα για το Shelve στην Python

Για να αποθηκεύσετε ένα αντικείμενο, εισαγάγετε πρώτα την ενότητα και, στη συνέχεια, αντιστοιχίστε την τιμή του αντικειμένου ως εξής:

 εισαγωγή ράφια 
βάση δεδομένων = shelve.open (filename.suffix)
αντικείμενο = Αντικείμενο ()
βάση δεδομένων ['κλειδί'] = αντικείμενο

Αν θέλετε να διατηρήσετε μια βάση δεδομένων αποθεμάτων, για παράδειγμα, θα μπορούσατε να προσαρμόσετε τον ακόλουθο κώδικα:

 εισαγωγή ράφια 
stockvalues_db = shelve.open ('stockvalues.db')
object_ibm = Values.ibm ()
stockvalues_db ['ibm'] = object_ibm
object_vmw = Values.vmw ()
stockvalues_db ['vmw'] = object_vmw
object_db = Values.db ()
stockvalues_db ['db'] = object_db

instagram viewer

Έχει ήδη ανοίξει ένα "stock values.db", δεν χρειάζεται να το ανοίξετε ξανά. Αντίθετα, μπορείτε να ανοίξετε πολλαπλές βάσεις δεδομένων τη φορά, να γράψετε σε καθένα κατά βούληση και να φύγετε Πύθων για να τα κλείσετε όταν τερματίσει το πρόγραμμα. Θα μπορούσατε, για παράδειγμα, να κρατήσετε μια ξεχωριστή βάση δεδομένων με ονόματα για κάθε σύμβολο, προσθέτοντας τα ακόλουθα στον προηγούμενο κώδικα:

 Υποτίθεται ότι το ράφι έχει ήδη εισαχθεί 
stocknames_db = shelve.open ('stocknames.db')
objectname_ibm = Names.ibm ()
stockname_db ['ibm'] = όνομα_object
objectname_vmw = Names.vmw ()
stockname_db ['vmw'] = όνομα_αντικειμένου_vmw
objectname_db = Names.db ()
stockname_db ['db'] = objectname_db

Σημειώστε ότι οποιαδήποτε αλλαγή στο όνομα ή στο επίθημα του αρχείου βάσης δεδομένων συνιστά ένα διαφορετικό αρχείο και επομένως μια διαφορετική βάση δεδομένων.

Το αποτέλεσμα είναι ένα δεύτερο αρχείο βάσης δεδομένων που περιέχει τις δεδομένες τιμές. Σε αντίθεση με τα περισσότερα αρχεία που έχουν γραφτεί σε μορφές με αυτόνομους χαρακτήρες, οι βάσεις δεδομένων είναι ραμμένες αποθηκεύονται σε δυαδική μορφή.

Μετά την εγγραφή των δεδομένων στο αρχείο, μπορεί να ανακληθεί ανά πάσα στιγμή. Εάν θέλετε να επαναφέρετε τα δεδομένα σε μια επόμενη περίοδο λειτουργίας, ανοίξτε ξανά το αρχείο. Αν πρόκειται για την ίδια συνεδρία, απλά ανακαλέστε την τιμή. κάνω ράφια αρχεία βάσης δεδομένων ανοίγουν σε λειτουργία ανάγνωσης-εγγραφής. Το παρακάτω είναι η βασική σύνταξη για την επίτευξη αυτού:

 εισαγωγή ράφια 
βάση δεδομένων = shelve.open (filename.suffix)
αντικείμενο = βάση δεδομένων ['κλειδί']

Έτσι ένα δείγμα από το προηγούμενο παράδειγμα θα διαβάσει:

 εισαγωγή ράφια 
stockname_file = shelve.open ('stocknames.db')
stockname_ibm = stockname_file ['ibm']
stockname_db = stockname_file ['db']

Προβληματισμοί με τη Shelve

Είναι σημαντικό να σημειωθεί ότι η βάση δεδομένων παραμένει ανοιχτή μέχρι να την κλείσετε (ή μέχρι να τερματιστεί το πρόγραμμα). Επομένως, αν γράφετε ένα πρόγραμμα οποιουδήποτε μεγέθους, θέλετε να κλείσετε τη βάση δεδομένων μετά από να εργαστείτε μαζί του. Διαφορετικά, ολόκληρη η βάση δεδομένων (όχι μόνο η τιμή που θέλετε) βρίσκεται στη μνήμη και καταναλώνει υπολογιστικών πόρων.

Για να κλείσετε ένα αρχείο ράφι, χρησιμοποιήστε την ακόλουθη σύνταξη:

 database.close () 

Εάν όλα τα παραπάνω παραδείγματα κώδικα ενσωματώθηκαν σε ένα πρόγραμμα, θα έχουμε δύο αρχεία βάσης δεδομένων ανοιχτά και καταναλώνουν μνήμη σε αυτό το σημείο. Έτσι, αφού έχετε διαβάσει τα ονόματα μετοχών στο προηγούμενο παράδειγμα, θα μπορούσατε να κλείσετε στη συνέχεια κάθε βάση δεδομένων με τη σειρά της ως εξής:

 stockvalues_db.close () 
stocknames_db.close ()
stockname_file.close ()